我正在使用Shiro重构webapp的安全模块,并且在多个auth过滤器上的逻辑操作方面遇到了麻烦。
例如Article实体。每个人都可以发布新文章,但只有文章所有者/创建者或系统管理员角色可以修改现有文章。
为实现这一目标,我创建了一个OwnerAuthzFilter
(扩展org.apache.shiro.web.filter.authz.AuthorizationFilter
)来检查当前用户是否是实体的创建者。
我想在[urls]
的{{1}}部分配置限制
shiro.ini
似乎Shiro没有为url过滤器提供逻辑表达式。它的Logical仅适用于注释,仅适用于注释和相同类型的过滤器(如RequiresRoles,RequiresPermissions)。
就我而言,我需要通过检查自定义[main]
ownerOf = my.OwnerAuthzFilter
[urls]
#ownerOf checks if a user is owner of entity "article" with request parameter "id"
/article/update*=authc, ownerOf["article","id"] OR roles["admin"]
和内置OwnerAuthzFilter
的逻辑OR结果来授权操作。
任何机构都有提示如何实现这个?
答案 0 :(得分:1)
为什么不为此编写特殊的过滤器?您可以在过滤器数组中放置任何字符串,这样您就可以编写自己的逻辑运算符。
你可以想到任何事情,例如:
/article/update*=authc, ownerOf["article","id", or(roles(admin))"]
然后解析字符串并应用您想要的正确授权逻辑。