jive中的权限管理 SQLJavaAOP编程
程序员文章站
2022-07-11 13:57:15
...
比如要createForum,那么jive就会这么做:
大体上的思路是,用代理模式,本来ForumFactory 是没有权限的相关方法和属性的,那么,就把这些功能代理给ForumFactoryProxy ,这样就把任务分开了!
就是这一句:
其中permissions是该代理类的一个属性,是在ForumFactory.getInstance中创建变量的最后一个参数。
该参数是这么得到的:
所以,得到一个权限是和用户的userid联系起来的,而userid在系统中是由 Authorization类来包装的
所以在
在数据库中,权限相关的表格如下:
返回了一个包装了权限数组的类ForumPermissions
数组permissions中各个元素的意义如下:
boolean read; p[0]
boolean systemAdmin; p[1]
boolean forumAdmin; p[2]
boolean userAdmin; p[3]
boolean groupAdmin; p[4]
boolean moderateThreads; p[5]
boolean createThread; p[6]
boolean createMessage; p[7]
boolean moderateMessages; p[8]
比如要添加一个对各个论坛都有管理员权限systemAdmin
insert into UserPerm(forumID,userID,userType,permission)
values (NULL,1,3,1);
其中第三位userType有以下三种:
匿名用户,游客,注册用户
分别是 11 ,12, 3
既然权限都创建了,下面权限的检查就不是一件难事了~~;
//就本例来说,创建论坛当然要管理员的权限,所以代码如下:
下一篇讨论关于切面编程的权限控制:AOP权限控制技术
大体上的思路是,用代理模式,本来ForumFactory 是没有权限的相关方法和属性的,那么,就把这些功能代理给ForumFactoryProxy ,这样就把任务分开了!
public class ForumFactoryProxy extends ForumFactory { ...... public Forum createForum(String name, String description); throws UnauthorizedException, ForumAlreadyExistsException { if (permissions.get(ForumPermissions.SYSTEM_ADMIN);); { Forum newForum = factory.createForum(name, description);; return new ForumProxy(newForum, authorization, permissions);; }else { throw new UnauthorizedException();; } } ...... }
就是这一句:
if (permissions.get(ForumPermissions.SYSTEM_ADMIN);); { //~~~~~~~~~ }else { throw new UnauthorizedException();; }
其中permissions是该代理类的一个属性,是在ForumFactory.getInstance中创建变量的最后一个参数。
该参数是这么得到的:
dbforumFactory.getPermissions(Authorization authorizaton); { return permissionsManager.getFinalUserPerms(-1, userID);; }
所以,得到一个权限是和用户的userid联系起来的,而userid在系统中是由 Authorization类来包装的
所以在
permissionsManager.getFinalUserPerms(-1, userID);;中,应该查询到数据库层,来对用户的权限进行进一步的处理!
在数据库中,权限相关的表格如下:
UserPerm ( forumID userID userType permission );; Userid(userType ,userID ); 两个表是多对多关系
StringBuffer sql = new StringBuffer( "SELECT DISTINCT permission FROM bisUserPerm WHERE " );; if (forumID == -1); { sql.append("forumID IS NULL AND ");; } else { sql.append("forumID=");.append(forumID);.append(" AND ");; } if (userID == -1); { sql.append("userID IS NULL and userType=");; sql.append(BisGlobals.ANONYMOUS);; } else if (userID == 0); { sql.append("userID IS NULL AND userType=");; sql.append(BisGlobals.REGISTERED_USERS);; } else { sql.append("userID=");.append(userID);.append(" AND userType=");; sql.append(BisGlobals.USER);; } ResultSet rs = stmt.executeQuery(sql.toString(););; while(rs.next();); { int newPerm = rs.getInt(1);; //!!!~~~~~ permissions[newPerm] = true; } } return new ForumPermissions(permissions);;
返回了一个包装了权限数组的类ForumPermissions
数组permissions中各个元素的意义如下:
boolean read; p[0]
boolean systemAdmin; p[1]
boolean forumAdmin; p[2]
boolean userAdmin; p[3]
boolean groupAdmin; p[4]
boolean moderateThreads; p[5]
boolean createThread; p[6]
boolean createMessage; p[7]
boolean moderateMessages; p[8]
比如要添加一个对各个论坛都有管理员权限systemAdmin
insert into UserPerm(forumID,userID,userType,permission)
values (NULL,1,3,1);
其中第三位userType有以下三种:
匿名用户,游客,注册用户
分别是 11 ,12, 3
既然权限都创建了,下面权限的检查就不是一件难事了~~;
//就本例来说,创建论坛当然要管理员的权限,所以代码如下:
permissions.get(ForumPermissions.SYSTEM_ADMIN););{ if (type < 0 || type > 8); { return false; } return values[type]; }
下一篇讨论关于切面编程的权限控制:AOP权限控制技术
下一篇: 包抄手的肉馅里放什么?抄手煮多久才熟?
推荐阅读
-
vue中如何实现后台管理系统的权限控制的方法示例
-
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程
-
vue中如何实现后台管理系统的权限控制的方法步骤
-
JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理
-
jive中的权限管理 SQLJavaAOP编程
-
Django中session进行权限管理的使用
-
动态加载权限管理模块中的Vue组件
-
PowerShell中以管理员权限启动应用程序的方法
-
Shiro权限管理框架(四):深入分析Shiro中的Session管理
-
浅谈权限管理的对象模型和实现 配置管理项目管理电子政务F#编程