如果用户拥有权限user:edit:1
而我正在使用注释驱动@RequiresPermissions("user:edit")
,为什么shiro会抛出异常?他们有user:edit:1
这个事实不应暗示这种许可吗?如果我放@RequriesPermissions("user:edit:1")
然后它工作正常但在操作的上下文中我将不知道1是什么,所以将在稍后的方法中检查,但我想避免进入该方法如果他们根本没有user:edit
的许可。
答案 0 :(得分:3)
我不认为,ascandrolis答案是正确的,因为Shiro文件说明:
然而,以下内容对于运行时检查来说不太理想:
if (SecurityUtils.getSubject().isPermitted("printer:print")) {
//print the document
}
为什么呢?因为第二个例子说“您必须能够打印到任何打印机才能执行以下代码块”。但请记住,“printer:print”相当于“printer:print:*”!
因此@RequiresPermissions("user:edit:*")
与@RequiresPermissions("user:edit")
的含义相同,即主体需要能够编辑任何用户。
答案 1 :(得分:1)
"user:edit"
隐含"user:edit:1"
,但不是相反。
您可以继续使用@RequiresPermissions("user:edit")
,然后在方法中检查“1”。您也可以使用通配符@RequiresPermissions("user:edit:*")
,它完全相同,但我认为它更清晰。