如何在 Apache Shiro 中定义属性级权限

Posted

技术标签:

【中文标题】如何在 Apache Shiro 中定义属性级权限【英文标题】:How can attribute-level permissions be defined in Apache Shiro 【发布时间】:2013-10-13 04:55:20 【问题描述】:

从docs 我读到可以定义属性级别的权限(以及资源​​和实例级别)

属性级别 - 权限现在指定实例或资源的属性。用户可以编辑 IBM 客户记录中的地址。

如何使用 Shiro 中通常定义权限的<resource>:<action>:<instance> 格式以声明方式定义这些权限?如果可以做类似<resource>:<action>:<instance>:<attributename> 的事情,这似乎是合乎逻辑的,但我在任何地方都找不到讨论这个问题的文档。

【问题讨论】:

【参考方案1】:

你检查http://shiro.apache.org/permissions.html了吗?

您可以根据自己的信息自己创建字符串。在我们的代码中,我们使用自定义领域以编程方式添加权限,如下所示:

public class OurAuthorizingReam extends AuthorizingRealm 
  ...
@Override
public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) 
    ... code to find permission infp

    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    while (.. looping through permission info)
            info.addStringPermission(... the permission string constructed);
    
    return info;

【讨论】:

我确实多次阅读提供的页面,但没有关于属性权限的内容。你能告诉我你的自定义代码是做什么的吗?您是否必须编写自己的代码来将字符串权限链接到可以读取/写入资源的哪些属性,或者 Shiro 是否提供了一些您可以利用的中间件? shiro 唯一能做的就是告诉你用户是否有特定的权限(Subject.isPermitted())以及将这些权限添加给用户的方式。我们已经围绕它编写了自定义代码。所以我们根据自己的逻辑构造权限字符串来进行属性检查。

以上是关于如何在 Apache Shiro 中定义属性级权限的主要内容,如果未能解决你的问题,请参考以下文章

Apache Shiro - 自定义 jdbc 领域 - 读取角色/权限

关于Apache Shiro权限框架的一些使用误区的解释

如何使用 Apache Shiro 处理分层角色/权限?

Apache Shiro 使用手册Shiro 授权

在 Web 项目中应用 Apache Shiro

无论存根权限如何,带有 checkPermission 的 Apache shiro 单元测试都会通过