Web程序权限设计思考
2011-08-23 07:59
423 查看
1、操作权限
1.1基本操作权限,例如增删改
1.2页面权限,针对每个页面的控制,页面中具体区域的权限控制
1.3菜单权限,或称模块权限,对应一个或多个菜单。
2.数据权限,控制到记录行
2.1自己只能浏览和修改自己的数据
2.2具备权限的可以浏览或修改所有的权限
角色表
ID_,roleName,roleDesc
权限代码表
ID_,opCode,opName,opDesc
1,1001,系统管理,系统管理
2,100101,系统管理-单位管理,系统管理-单位管理
3,100102,系统管理-部门管理,系统管理-部门管理
4,100103,系统管理-帐号管理,系统管理-帐号管理
...
10,2001,新闻管理,新闻管理
11,200101,新闻管理-浏览,新闻管理-浏览
12,200102,新闻管理-增删改,新闻管理-增删改
13,200103,新闻管理-审批,新闻管理-审核
其中,1001应理解为模块权限或页面权限,200102应理解为操作权限
权限角色表,给指定的角色设置权限
ID_,opId,roleId
角色用户表,给指定的帐号设置角色
ID_,roleId,userId
通过sql查询出指定帐号的权限列表
opCode,hasOp
1001,true
200101,flase
....
sql:
SELECT o.opName,r.roleId FROM core_op o
left join core_op_role_relation r on r.opId = o.ID_ and r.roleId in (select u.roleId from core_role_user_relation u where u.userId = 1)
将权限清单加入Session,构造一个方法Map 和 Boolean hasOp(String userId,String opCode)
在jsf页面中通过EL表达式来进行权限控制
比如,rendered="#{NySession.hasOp['200101']=='true'}"
在jsp页面中通过if(hasOp('userId','200101')){}来判断
在javabean中,也是通过hasOp来判断。
用户登录时创建Map,退出时清空Map。
那么记录行权限如何判断呢?
我们在业务表中设置一个CID_字段,记录这条记录的创建者。如果业务限定只有自己可以浏览或修改的话,就将当前帐号的id作为业务表sql的查询条件。具备权限的,通过if(hasOp())判断后进而决定是否追加查询限制条件。
对于更加复杂的记录行控制需求,我们需要设置一个权限表
例如有业务表document,希望可以针对帐号和角色设置访问或修改权限。
我们需要设置两张张权限表document_op_user和document_op_role,例如ID_,docId,userId,在hasOp判断之后就可以决定是否在查询语句中加入限定条件。
限定条件的sql语句一般这么写:
select doc.*
from core_document doc
where (doc.CID_ = :userId
or exists (select 1 from core_document_role_relation r where r.roleId in (SELECT role.roleId FROM core_role_user_relation role where role.userId = :userId) and r.docId = doc.ID_)
or exists (select 1 from core_document_user_relation u where u.userId = :userId and u.docId = doc.ID_))
对于复杂的sql可以写成存储过程。上面只是控制到了记录行的访问权限,要想控制增删改权限需要借助操作权限控制。
菜单权限和上述权限类似,通过一条sql来查询当前帐号的菜单权限。
由于MiniOA是开源的,所以MiniOA的每一个页面和按钮都会有权限控制,当然,如果只是单个项目,权限控制不必那么严格。
欢迎斧正
来源:http://www.minioa.net/viewtopic.php?f=7&t=200&p=272#p272
1.1基本操作权限,例如增删改
1.2页面权限,针对每个页面的控制,页面中具体区域的权限控制
1.3菜单权限,或称模块权限,对应一个或多个菜单。
2.数据权限,控制到记录行
2.1自己只能浏览和修改自己的数据
2.2具备权限的可以浏览或修改所有的权限
角色表
ID_,roleName,roleDesc
权限代码表
ID_,opCode,opName,opDesc
1,1001,系统管理,系统管理
2,100101,系统管理-单位管理,系统管理-单位管理
3,100102,系统管理-部门管理,系统管理-部门管理
4,100103,系统管理-帐号管理,系统管理-帐号管理
...
10,2001,新闻管理,新闻管理
11,200101,新闻管理-浏览,新闻管理-浏览
12,200102,新闻管理-增删改,新闻管理-增删改
13,200103,新闻管理-审批,新闻管理-审核
其中,1001应理解为模块权限或页面权限,200102应理解为操作权限
权限角色表,给指定的角色设置权限
ID_,opId,roleId
角色用户表,给指定的帐号设置角色
ID_,roleId,userId
通过sql查询出指定帐号的权限列表
opCode,hasOp
1001,true
200101,flase
....
sql:
SELECT o.opName,r.roleId FROM core_op o
left join core_op_role_relation r on r.opId = o.ID_ and r.roleId in (select u.roleId from core_role_user_relation u where u.userId = 1)
将权限清单加入Session,构造一个方法Map 和 Boolean hasOp(String userId,String opCode)
在jsf页面中通过EL表达式来进行权限控制
比如,rendered="#{NySession.hasOp['200101']=='true'}"
在jsp页面中通过if(hasOp('userId','200101')){}来判断
在javabean中,也是通过hasOp来判断。
用户登录时创建Map,退出时清空Map。
那么记录行权限如何判断呢?
我们在业务表中设置一个CID_字段,记录这条记录的创建者。如果业务限定只有自己可以浏览或修改的话,就将当前帐号的id作为业务表sql的查询条件。具备权限的,通过if(hasOp())判断后进而决定是否追加查询限制条件。
对于更加复杂的记录行控制需求,我们需要设置一个权限表
例如有业务表document,希望可以针对帐号和角色设置访问或修改权限。
我们需要设置两张张权限表document_op_user和document_op_role,例如ID_,docId,userId,在hasOp判断之后就可以决定是否在查询语句中加入限定条件。
限定条件的sql语句一般这么写:
select doc.*
from core_document doc
where (doc.CID_ = :userId
or exists (select 1 from core_document_role_relation r where r.roleId in (SELECT role.roleId FROM core_role_user_relation role where role.userId = :userId) and r.docId = doc.ID_)
or exists (select 1 from core_document_user_relation u where u.userId = :userId and u.docId = doc.ID_))
对于复杂的sql可以写成存储过程。上面只是控制到了记录行的访问权限,要想控制增删改权限需要借助操作权限控制。
菜单权限和上述权限类似,通过一条sql来查询当前帐号的菜单权限。
由于MiniOA是开源的,所以MiniOA的每一个页面和按钮都会有权限控制,当然,如果只是单个项目,权限控制不必那么严格。
欢迎斧正
来源:http://www.minioa.net/viewtopic.php?f=7&t=200&p=272#p272
相关文章推荐
- Web程序权限设计思考
- .NET MVC权限设计思考之切入点
- Asp.net MVC权限设计思考 (一)数据库建库部分
- 疯狂.NET 通用权限设计 C/S后台管理,B/S前台调用源码样例程序源码下载之 --- 操作权限
- web程序莫名弹出错误提示框(dwr),处理方法。产生原因有待思考
- [转]设计思考:Flash Web结构浅析-浅谈背景层
- Java Web角色权限设计
- Web用户的身份验证及WebApi权限验证流程的设计和实现
- 基于web信息管理系统的权限设计分析和总结
- Web用户的身份验证及WebApi权限验证流程的设计和实现
- 换位思考权限设计(把复杂的问题,简单化才是水平,用简单的道理解决复杂的问题)
- 权限系统设计思考
- web项目角色权限的设计结构图
- 【程序思考】RIA 对于 java 在 web 开发领域是否是一个转机?
- 疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 数据集权限
- web程序开发与设计
- Asp.net MVC权限设计思考 (二)逻辑部分实现
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 设计一个漂亮的WEB界面
- Web用户的身份验证及WebApi权限验证流程的设计和实现
- 我的第一个python web开发框架(34)——后台管理系统权限设计