ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)

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

用户登录之后  登录信息是保存在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 表示用户没有此权限  那么就不显示

原文地址:https://www.cnblogs.com/Joke-Jay/p/7391143.html