Apache shiro隐含权限

时间:2011-03-10 16:40:25

标签: java annotations shiro

如果用户拥有权限user:edit:1而我正在使用注释驱动@RequiresPermissions("user:edit"),为什么shiro会抛出异常?他们有user:edit:1这个事实不应暗示这种许可吗?如果我放@RequriesPermissions("user:edit:1")然后它工作正常但在操作的上下文中我将不知道1是什么,所以将在稍后的方法中检查,但我想避免进入该方法如果他们根本没有user:edit的许可。

2 个答案:

答案 0 :(得分:3)

我不认为,ascandrolis答案是正确的,因为Shiro文件说明:

  

然而,以下内容对于运行时检查来说不太理想:

     

if (SecurityUtils.getSubject().isPermitted("printer:print")) {   //print the document   }

     

为什么呢?因为第二个例子说“您必须能够打印到任何打印机才能执行以下代码块”。但请记住,“printer:print”相当于“printer:print:*”!

Shiro Documentation

因此@RequiresPermissions("user:edit:*")@RequiresPermissions("user:edit")的含义相同,即主体需要能够编辑任何用户。

答案 1 :(得分:1)

"user:edit"隐含"user:edit:1",但不是相反。 您可以继续使用@RequiresPermissions("user:edit"),然后在方法中检查“1”。您也可以使用通配符@RequiresPermissions("user:edit:*"),它完全相同,但我认为它更清晰。