在用户是否拥有某项权限的问题  是这样解决的:

用户登录之后  登录信息是保存在session域中的  通过el表达式可得到登录的对象信息  那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 那么登录或者不登录  访问首页的时候

就会显示所有的权限列表(即操作菜单)

这些权限信息是在服务器启动的时候  检索并且保存在了application中的(可以看上一篇博客总结)  所以在遍历的时候 如果不加判断  默认显示的是所有的权限信息  即操作菜单

首先理清思路  user用户 中存在role角色的集合  表示用户拥有的岗位集合  而role角色 又和privilege权限建立了关联 即每个角色都可以被赋予或者取消权限

遍历输出权限列表的时候(对每一个权限都进行了判断操作)  判断用户是否拥有该权限  如果没有 那么就不显示此次遍历出的权限信息  用户看不到  当然无法操作此权限  那么就解决了权限的问题

粉色框子中的name是当前遍历出的权限名称  调用的方法是user模型中创建的方法(不在页面上直接判断是因为这个代码在页面上并不是一两行代码就可以解决的  所以这里学会了新技能  即代码很复杂的时候  可以在el中调用方法来执行判断)

解释一下上面的代码:首先判断当前用户的登录名称是否为admin  如果为admin那么就返回true  显示当前传递过来的权限信息  当然这个判断会执行很多次  因为遍历权限列表的时候  把权限名称都传递过来验证

如果不是管理员  那么就接着判断:

for(Role role:Roles){

}

对当前用户的所有岗位进行遍历  得到的是当前用户的所有岗位集合

for(Privilege privilege:role.getPrivilege){

}

每一个岗位对象再次遍历(一个岗位对象可以拥有很多权限)  得到的是该岗位对象的所有权限数据

if("name".equals(privilege.getName));

传递过来的name 和该岗位对应的所有权限数据进行比对  如果有名字一样的  就说明这个用户拥有这个权限

那么就返回true 在页面可以显示出该权限信息  当然 该用户可以操作此权限菜单

如果遍历到最后  没有发现与name匹配的权限名称  就返回false 表示用户没有此权限  那么就不显示

ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)的更多相关文章

  1. ruby中的可调用对象--方法

    上一篇讲了ruby中的可调用对象proc和lambda,他们都是块转换成的对象.ruby中的可调用对象还有方法.通过使用method方法,并且以方法名作为参数(字符串或者符号),就可以得到一个方法对象 ...

  2. IT兄弟连 JavaWeb教程 EL表达式中的内置对象

    EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1  EL表达式中的内置对象 这11个隐 ...

  3. Day_08【面向对象】扩展案例3_使用多态的形式创建缉毒狗对象,调用缉毒方法和吼叫方法

    分析以下需求,并用代码实现: 1.定义动物类: 行为: 吼叫:没有具体的吼叫行为 吃饭:没有具体的吃饭行为 2.定义缉毒接口 行为: 缉毒 3.定义缉毒狗:犬的一种 行为: 吼叫:汪汪叫 吃饭:狗啃骨 ...

  4. java 中使用ajax调用后台方法注意事项

    java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...

  5. C++中的可调用对象

    在C++中,常常会利用函数来简化程序流程.函数的存在使得C++整体更加“模块化”,因而也使得代码可读性大大提高. 在C++程序中,常常会很灵活地调用函数来实现不同的功能与目的(函数重载.继承多态等等) ...

  6. ruby中的可调用对象--proc和lamdba

    ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是.那么,如果你想存下来一个块,方便以后使用,你就需要一个对象.ruby中有三种方法,把块转换成可以利用的对象. Proc. ...

  7. 关于Hibernate查询对象调用set方法自动同步到数据库解决方案

    Hibernate的get和load方法查询出的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,如果再同一个事务里面,那么在事务递交的时候,Hibernate会把你设置的值自动更新到 ...

  8. 【Python】Python中子类怎样调用父类方法

    python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类, ...

  9. String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)

    示例: public class StringTraining { public static void changeStr(String str){ str = "137878" ...

随机推荐

  1. 【c语言】 模拟实现库函数的atoi函数

    // 模拟实现库函数的atoi函数 #include <stdio.h> #include <string.h> #include <assert.h> #incl ...

  2. linux c 操作utmp 和 wtmp 文件接口

    /var/run/utmp 保存当前在本系统中的用户信息 /var/log/wtmp 保存登陆过本系统的用户信息 他们保存的信息是基于结构体 struct utmp 的(/usr/include/bi ...

  3. git的经常使用命令

    $ git config --global user.name "姓名" $ git config --global user.email "xxx@qq.com&quo ...

  4. ORA-09925: Unable to create audit trail file汇总

    今天一兄弟的库报ORA-09925: Unable to create audit trail file,当时查 df -h有可用空间,文件夹的权限也正确,未df -i查看Inodes使用情况,审计文 ...

  5. day63-webservice 04.JaxWsServerFactoryBean和SOAP1.2

    <wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap12="h ...

  6. [JavaEE] Apache Maven 入门篇(上)

    http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html 作 ...

  7. 快速排序c++实现 快排C++代码实现

    快速排序c++实现 快排C++ 第一.算法描述 快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法, 快速排序算法是采用分治思想的算法,算法分 ...

  8. BZOJ 2073

    思路: 状压DP  枚举子集 //By SiriusRen #include <cstdio> #include <cstring> #include <algorith ...

  9. CSS3 动画 思维导图

    思维导图在新窗口打开浏览

  10. 【技术累积】【点】【java】【5】Random和shuffle()

    闲聊 妈耶,又这么久没写了..不过最近写其他文章有点多啊... 今天用到Random这个类,竟然还要去查了下... 基本概念 Random类,背后是伪随机数(数学上的东西): 不是很理解,但是基本上而 ...