我正在尝试使用apache对一些复杂的权限管理系统建模。
英语不是我的母语,我担心我可能遗漏了一些术语的微妙之处,如“角色”、“权限”、“权利”和“特权”。
例如,假设我希望创建一个管理资源的系统,例如位于建筑物内的打印机。DB保存哪台打印机位于哪个建筑物中的信息。该系统的用户应该能够重置打印机或打印到它。
很明显,一些用户将是“超级管理员”,并能够重置和打印到任何打印机(‘打印机:**’)-我想我们可以说,这些人有一个“超级管理员的角色”。
但是,如果应该允许某人重置特定建筑物中的打印机(“building :a:*”),该怎么办?“建筑管理”是一种(实际的)角色吗?还是说这只是一栋特定建筑的许可?您将如何使用apache对此进行建模?
n.b.
在标记这个q时,我添加了用户角色标签,它说:“用户角色是一组在系统上共享相同特权或权限的用户。使用这个标记来询问用户角色在特定的安全框架中如何工作,或者在您的程序中如何实现用户角色。”
我是否可以正确地假设,根据这个定义,不存在“建筑管理”这样的角色,因为作为A楼的行政人员,你没有获得与B楼管理员相同的权限吗?如果是这样的话,用什么正确的术语来描述“建筑物管理”呢?
发布于 2016-05-26 00:18:15
您考虑过在WildCardPermission格式中使用三个以上的令牌吗?
可以使用的令牌数量没有限制,所以这取决于您在应用程序中使用的方式。 - https://shiro.apache.org/static/1.2.4/apidocs/org/apache/shiro/authz/permission/WildcardPermission.html
与Apache示例和文档中常用的domain:action:instance语法不同,您可以添加另一个令牌来表示构建,例如printer:print,reset:*:buildingA。
这种方案的缺点是,每当您在特定打印机上检查是否允许某个操作时,您现在还必须指定位置,尽管表示打印机实例的令牌可能已经唯一地标识了该打印机:
// let's say the role for buildingA-admin has permission of "printer:*:*:buildingA"
subject.isPermitted("printer:print:epson123:buildingA"); // returns true
subject.isPermitted("printer:print:epson123"); // returns false根据应用程序域的不同,像buildingA:printer:print,reset:epson123这样的结构甚至可能更合适或更有用。
要回答有关用户角色的另一个问题,您可以正确地假设,如果您同时拥有buildingA-admin和buildingB-admin角色,那么它们是不同的用户角色,如果分配给它们的权限并不相同。
您可以设想Building Admin的一般用户角色,用于不同建筑物的所有管理员可能具有的权限,以避免在不同的特定于建筑物的管理角色之间重复这些权限。
https://stackoverflow.com/questions/37430932
复制相似问题