【问题标题】:Apache Shiro Permissions: How to implement any of permission checkApache Shiro 权限:如何实现任何权限检查
【发布时间】:2021-07-30 05:32:22
【问题描述】:

我有以下权限的列表:

book:download:red,
book:download:blue,
book:download:green

现在,我想检查主题是否设置了任何这些权限。如果其中至少有一个存在,则 - 允许。

所以,在我的 REST 控制器上,我正在用值拍打这个注释:

@RequiresPermissions(value = book:download:*)

这意味着在我的情况下,主题至少有一本可以下载的有效书籍,-让他进来!

但是,令我惊讶的是,我得到了 403:

Subject does not have permission [book:download:*]

我希望 Shiro 使用此通配符并将其与提交的权限(如 REGEX 检查)进行比较。结果是 - 允许访问。

如果我的理解有误,请纠正我。有没有办法实现我在这里的要求?

【问题讨论】:

    标签: shiro


    【解决方案1】:

    以另一种方式考虑匹配,您的资源具有特定权限“book:download:red”并且您的用户可以下载任何书籍,因为他们拥有更一般的权限book:downloadbook:download:*(或相同的特定@987654326 @权限)

    您还可以将注释配置为使用逻辑“或”,您可以在其中使用redbluegreen 的列表 https://shiro.apache.org/static/1.7.1/apidocs/org/apache/shiro/authz/annotation/RequiresPermissions.html

    查看更多:https://shiro.apache.org/permissions.html

    【讨论】:

    • 我知道框架想让我认为我需要在注解级别操作最严格的权限。 ORing 确实有效,但是如果您拥有大量的 ORing 权限怎么办?那会变成一个非常污染的界面,对吧?如果我们为这样的情况提供一些语法糖不是很好吗?
    • 无论如何,我不得不引入我自己的通配符,覆盖AuthorizingRealm 的一些isPermitted 方法以将通配符扩展为已知权限的集合。
    猜你喜欢
    • 2016-09-28
    • 2011-07-12
    • 2013-04-26
    • 2015-01-24
    • 2012-07-28
    • 2017-06-14
    • 2017-11-27
    • 2012-05-23
    • 2013-02-26
    相关资源
    最近更新 更多