使用Apache Shiro根据所有者或管理员角色限制操作

时间:2014-04-30 14:26:27

标签: java shiro

我正在使用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结果来授权操作。

任何机构都有提示如何实现这个?

1 个答案:

答案 0 :(得分:1)

为什么不为此编写特殊的过滤器?您可以在过滤器数组中放置任何字符串,这样您就可以编写自己的逻辑运算符。

你可以想到任何事情,例如:

/article/update*=authc, ownerOf["article","id", or(roles(admin))"] 

然后解析字符串并应用您想要的正确授权逻辑。