关于权限管理的一些疑问?

jieyuan_cg 2009-09-15
问题一:
   目前,一般所做的权限设计都是RBAC,也就是基于角色的。但基于组织机构的资源分配,是否应该纳入权限管理的范围?比如:同样类型的资源,每个部门都只能查看属于自己部门的那一部分资源。这种情况下,访问同类型的资源时,用的uri是一样的,只是参数不同。这样的场景,是否应该也用权限管理来控制?

问题二:
   b/s结构的系统,权限控制更多的是基于url的控制,对业务方法的控制倒是其次(对于安全性要求不高的系统)。url的访问控制总是要进行访问后才进行拦截控制。而更好的用户体验是,如果该用户没有该功能的操作权限时,就不要把相应的操作显示出来。像这种情况,是否应该写两套验证,一个是基于url,filter的,另外一个是基于控制操作显示的?

问题三:
   针对以上两问题,有没有大拿做过针对springsecurity的实现?可否赐教?
metadmin 2009-09-16
共同探讨。

问题一:RBAC模型不能控制这样的资源类型。RBAC只能控制功能级权限,你说的场景就是数据级权限控制了。有些网友采用 用户、资源、用户资源、角色、用户角色等关系表来描述用户(或者用户组)对资源(或者资源组)之间的映射关系。
当用户访问资源的时候,需要经过程序来验证。

问题二:filter是很好的对url控制。如果界面不显示相关功能,一般采用功能菜单来控制。有些按钮、链接(比如:“删除客户”按钮或者链接),只能采用if else 来判断。

问题三:SS我不大熟,这个玩意太难了,不容易掌握。SS是一套框架。建议看看www.metadmin.com, metadmin将权限做成权限管理中间件。暴露权限验证服务,权限策略的编写,是通过人性化界面配置出来,不用写代码和XML文件。
nhy520 2009-09-16
我现在的系统正在用这个spring security.感觉不是很好.每次去走拦截器,判断用户是否有权限访问资源,虽然我把用户放入缓存但效率也不是很好.还有就是url的拦截上的问题,我走的是webwork2的架子,跑action,在web-inf/下建立文件夹,放jsp文件 这样拦截时,不好匹配,因为我的url是自己重新写的形式如:abc.action?m=saveMethod&id=999 我们把方法都写在了m后面,而不是在xwrok.xml配置,所以有点郁闷..
jieyuan_cg 2009-09-16
metadmin 写道
共同探讨。

问题一:RBAC模型不能控制这样的资源类型。RBAC只能控制功能级权限,你说的场景就是数据级权限控制了。有些网友采用 用户、资源、用户资源、角色、用户角色等关系表来描述用户(或者用户组)对资源(或者资源组)之间的映射关系。
当用户访问资源的时候,需要经过程序来验证。

问题二:filter是很好的对url控制。如果界面不显示相关功能,一般采用功能菜单来控制。有些按钮、链接(比如:“删除客户”按钮或者链接),只能采用if else 来判断。

问题三:SS我不大熟,这个玩意太难了,不容易掌握。SS是一套框架。建议看看www.metadmin.com, metadmin将权限做成权限管理中间件。暴露权限验证服务,权限策略的编写,是通过人性化界面配置出来,不用写代码和XML文件。


问题一:如果采用用户,资源,用户资源,角色,用户角色这种方式来控制访问,扩展性会不会有问题?还是上面那个例子,假如我有5个部门,是不是要针对每个部门都建立一个角色,然后对相应的部门人员授予该部门的角色?但如果,我有30个部门呢?每个部门都新建一个角色吗?那50个呢?

既然已经存在了组织机构与人员之间的关系了,能否把这种关系也引入到权限判断呢?(如果用springsecurity,是不是就是自己定义voter?)

问题二:呵呵,看来对相关操作的判断,只能自己去实现一套方法了。

问题三:已经在看metadmin相关的东西,希望能有所帮助。

多谢圈主关注,有问题以后会继续找您探讨,还望不吝赐教~
jieyuan_cg 2009-09-16
nhy520 写道
我现在的系统正在用这个spring security.感觉不是很好.每次去走拦截器,判断用户是否有权限访问资源,虽然我把用户放入缓存但效率也不是很好.还有就是url的拦截上的问题,我走的是webwork2的架子,跑action,在web-inf/下建立文件夹,放jsp文件 这样拦截时,不好匹配,因为我的url是自己重新写的形式如:abc.action?m=saveMethod&id=999 我们把方法都写在了m后面,而不是在xwrok.xml配置,所以有点郁闷..

看springsecurity的那么多的拦截器,确实有些多,对性能的影响,目前还未在项目中使用,不敢评价。看兄台的情况,效率会有问题,那就要仔细考虑是否采用了。

其实,像你这种情况,对资源的访问,都是通过abc.action来进行的,只不过对资源的操作方法变成了url的参数。直接在acb.action中统一控制权限,应该是一个比较可行的方式。我们原来的老系统就是采用这种方式来做的,但有很多弊端~
metadmin 2009-09-16
jieyuan_cg 写道

问题一:如果采用用户,资源,用户资源,角色,用户角色这种方式来控制访问,扩展性会不会有问题?还是上面那个例子,假如我有5个部门,是不是要针对每个部门都建立一个角色,然后对相应的部门人员授予该部门的角色?但如果,我有30个部门呢?每个部门都新建一个角色吗?那50个呢?


这个模型拓展性缺陷是一目了然的:1,部署和维护工作量大;2,对于需求变更影响大。


按照国际惯例,对数据级权限控制,一般采取策略模式。用策略来描述需求,然后使用引擎来解析这些策略,得出权限验证结果。
因为,数据级权限,千变万化,很难用结构性数据来描述。


有些公司,采用规则引擎,也可以尝试。对于工业强度高的软件,不建议采用。
xiantiaolang 2009-09-16
jieyuan_cg 写道

问题一:如果采用用户,资源,用户资源,角色,用户角色这种方式来控制访问,扩展性会不会有问题?还是上面那个例子,假如我有5个部门,是不是要针对每个部门都建立一个角色,然后对相应的部门人员授予该部门的角色?但如果,我有30个部门呢?每个部门都新建一个角色吗?那50个呢?


我觉得引入角色组和用户组就容易多了
raodun 2009-09-16
nhy520 写道
我现在的系统正在用这个spring security.感觉不是很好.每次去走拦截器,判断用户是否有权限访问资源,虽然我把用户放入缓存但效率也不是很好.还有就是url的拦截上的问题,我走的是webwork2的架子,跑action,在web-inf/下建立文件夹,放jsp文件 这样拦截时,不好匹配,因为我的url是自己重新写的形式如:abc.action?m=saveMethod&id=999 我们把方法都写在了m后面,而不是在xwrok.xml配置,所以有点郁闷..

你解析xml得不到方法,但是解析类可以得到
jieyuan_cg 2009-09-16
xiantiaolang 写道
jieyuan_cg 写道

问题一:如果采用用户,资源,用户资源,角色,用户角色这种方式来控制访问,扩展性会不会有问题?还是上面那个例子,假如我有5个部门,是不是要针对每个部门都建立一个角色,然后对相应的部门人员授予该部门的角色?但如果,我有30个部门呢?每个部门都新建一个角色吗?那50个呢?


我觉得引入角色组和用户组就容易多了

愿闻其详~
引入角色组和用户组怎么来解决这个问题呢?

另外:引入角色组或者用户组,是不是还涉及到一个用户与角色组,用户与用户组,用户与真正的组织机构之间的同步问题??
比如:张三从部门A调到部门B,这时候,除了维护组织机构与用户的关系,还必要要维护用户与角色组,用户与用户组的关系?如果直接用组织机构与用户的关系来判断,是否是一种更好的方式呢?
jieyuan_cg 2009-09-16
metadmin 写道
jieyuan_cg 写道

问题一:如果采用用户,资源,用户资源,角色,用户角色这种方式来控制访问,扩展性会不会有问题?还是上面那个例子,假如我有5个部门,是不是要针对每个部门都建立一个角色,然后对相应的部门人员授予该部门的角色?但如果,我有30个部门呢?每个部门都新建一个角色吗?那50个呢?


这个模型拓展性缺陷是一目了然的:1,部署和维护工作量大;2,对于需求变更影响大。


按照国际惯例,对数据级权限控制,一般采取策略模式。用策略来描述需求,然后使用引擎来解析这些策略,得出权限验证结果。
因为,数据级权限,千变万化,很难用结构性数据来描述。


有些公司,采用规则引擎,也可以尝试。对于工业强度高的软件,不建议采用。

多谢指导。
现在考虑两种方式:一是acl,二是策略或者规则模式。
基于acl的控制实现比较简单,但数据量大的时候,性能问题不知是否严重。
基本策略或者规则模式,要写自己的引擎,是一件工作量非常大的事情。
有点挠头了……请问圈主,贵公司的产品,是基于哪种方式?如果是基于策略模式,能否大概说下原理呢(不涉及商业机密的前提下)?
Global site tag (gtag.js) - Google Analytics