基于动态树的权限管理
来源:互联网 发布:机器人运动算法 编辑:程序博客网 时间:2024/06/04 15:54
实习 公司项目需要要求写一个基于动态树是的用户权限管理,说白了就是不同的用户对不同的树结构拥有不同的权限,基本思想是采用基于角色的访问控制模型(Role-Base Acess Control,RBAC)进行设计,也就是角色,用户,权限,当然也可以有组的概念,这里的动态树是指EXT中根据后台数据库中的的表记录动态生成的树结构,为了能够对每颗树节点(动态)的进行权限的分配,后台进行鉴权等,为了方面的达到上面的目的,使用了基于视图的访问控制模型(View-base Acess Control Model,VACM)是一种针对树型区域的访问控制模型,其标准已经被SNMPv3的安全模型所采纳,能够对树模型上的任意节点或子树配置访问权限。
上面只是一个树的鉴权,看登陆用户是否对这个树有权限,就不在这里细说了
首先就是对数据库的设计,在这之前先了解一下树的表结构
其中OID字段是采用的MIB(snmp)中的命名对树节点进行描述的一种方法比如(0)表示根节点,(0,1)表示他的一整个孩子,每个节点由其父节点到根节点所有id组成,这样每一个树节点就有唯一的OID来表示,并能清楚的知道父子之间的关系,大大的增加了鉴权的方便性。
接下来就是一些其他树结构在这里就不多说了设计截图给大家看看。
user表:
group表:
user_group表:
group_permission表:
treeoid表:
还有就是permission表:
它们之间的外键关系:
数据库就到这里,主要的代码就是鉴权,其他的如用户管理(增删改查),权限分配,角色分配等我想大家也很熟悉了,这里就贴出对动态树的鉴权代码:
public class TreeAuth {public List<Tree> treeAuthority(List<Tree> trees,User user){List<Tree> allTrees = trees;List<Tree> myTrees = new ArrayList<Tree>();//首先在用户角色表中查角色iDUserGroupDAO userGroupDAO = new UserGroupDAO();GroupPermissionDAO groupPermissionDAO = new GroupPermissionDAO();PermissionDAO permissionDAO = new PermissionDAO();TreeoidDAO treeoidDAO = new TreeoidDAO();List<UserGroup> userGroups = userGroupDAO.findByProperty("userid", user.getId());for (Iterator iterator = userGroups.iterator(); iterator.hasNext();) {UserGroup userGroup = (UserGroup) iterator.next();int roleId = userGroup.getRoleid();//根据roleId找到角色(可能多个所有用链表)List<GroupPermission> groupPermissions = groupPermissionDAO.findByRoleid(roleId);//根据roleId找到permissionId 找到对应的权限for (Iterator iterator2 = groupPermissions.iterator(); iterator2.hasNext();) {GroupPermission groupPermission = (GroupPermission) iterator2.next();int permissionId = groupPermission.getPermissionid();System.out.println(roleId+"对应的permissionId:"+permissionId); Permission permission = permissionDAO.findById(permissionId); List<Treeoid> treeOIDs = treeoidDAO.findByPermissionid(permissionId); for (Iterator iterator3 = treeOIDs.iterator(); iterator3.hasNext();) {Treeoid treeoid = (Treeoid) iterator3.next();String oID = treeoid.getOid();for(Iterator<Tree> iterator4 = allTrees.iterator();iterator4.hasNext();){Tree tree = iterator4.next();String oid1 = dealString(tree.getOid());//处理一下字符串String oid2 = dealString(oID);if(oid1.contains(oid2)){//如果用户权限中有这个树就把加进去(包括他的子树)//permission.getInclude()== 1表示包括此子树 另外0表示不包括 这样可以实现一颗树下可不全能操作if(!myTrees.contains(tree)&&permission.getInclude()== 1){//避免对Tree对象重复存储,因为用户可能具有不同角色,不同的角色之间可能存在对相同树的操作造成树重复的储存if(permission.getType()==1){tree.setTypeString("可读");}if(permission.getType()==2){tree.setTypeString("可读/可写");}myTrees.add(tree);System.out.println("---"+tree.getText());}//当不包含时,但是因为前面的步奏已经包含进去了的,就删除if(myTrees.contains(tree)&&permission.getType()==0){myTrees.remove(tree);}}}}}}return myTrees;}/* * 删除OID中的前后括号 */public String dealString(String oid){String temp = oid;int start = 1;int end = temp.length()-1;return temp.substring(start, end);}}
上面只是一个树的鉴权,看登陆用户是否对这个树有权限,就不在这里细说了
希望大家指正谢谢:
0 0
- 基于动态树的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- 基于角色的权限管理
- 基于角色的权限管理
- 基于角色的权限管理
- 基于spring+struts2+ibatis+OperaMasks实现的小系统(实现权限管理和动态开发)
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 【权限管理】基于shiro的权限管理开发实现
- 【权限管理】基于shiro的权限管理开发实现
- 提高Eclipse使用效率
- 使用Roslyn动态编译和执行
- css小技巧
- java 程序员前期要学的东西
- 根据输入值 让select 选中
- 基于动态树的权限管理
- SQL连接查询保障效率的简易原则
- 《程序员健康指南》作者Joe Kutner:在运动中工作
- Dynea brown film faced plywood from LongDa Wood in China / Vietnam / Malaysia lzba
- php变量
- 从B 树、B+ 树、B* 树谈到R 树
- 实习总结
- 计算机网络学习--tcp伪首部
- 要怎么阅读别人的代码,自己才能进步