每个用户在Apache Shiro中有不同的权限?

int*_*net 4 database jdbc shiro

我用实体用户和权限构建了一个数据库

user(id,email,password,permission)权限(id,create_user,delete_user,user_fk)

create_user和delete_user是BOOLEAN.

关系:一对一

现在每个用户都可以拥有自己的权限.

我的问题是:如何使用shiro从数据库中读取权限?

And*_*ild 5

如果您真的只想在用户级别分配权限,则可以"伪造"角色表以使Shiro满意.

正如Wouter所提到的,使用JdbcRealm和为表设置指定3个查询.您应该修改权限表以具有此结构:

permission (id, permissionname, user_fk)
Run Code Online (Sandbox Code Playgroud)

然后根据需要为create_user/delete_user权限插入行.这样,在您的设置中添加另一个权限(例如reset_password)非常简单,而无需修改数据库模式.

在shiro.ini中(或者你如何调用你的shiro配置文件):

jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
Run Code Online (Sandbox Code Playgroud)

对于查询使用,然后:

jdbcRealm.authenticationQuery = select password from user where email=?
jdbcRealm.userRolesQuery = select id from user where email=?
jdbcRealm.authenticationQuery = select permissionname from permission where user_fk=?
Run Code Online (Sandbox Code Playgroud)

您的设置中的小技巧是:您根本没有角色,因此我们只返回用户的id作为角色名称.完成权限表中的查找后,它将使用角色名称(= user pk)并返回关联的权限.