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

时间:2013-10-30 21:44:21

标签: database jdbc shiro

我使用实体用户和权限

构建了一个数据库

用户(身份证,电子邮件,密码,权限) 权限(id,create_user,delete_user,user_fk)

create_user和delete_user是BOOLEAN。

关系:One-One

现在每个用户都拥有自己的权限。

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

2 个答案:

答案 0 :(得分:5)

如果你真的只想在用户级别分配权限,你可以"假"角色表使Shiro感到高兴。

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

permission (id, permissionname, user_fk)

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

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

jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm

对于查询使用,请执行以下操作:

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=?

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

答案 1 :(得分:4)

您应该在.ini文件中配置JdbcReam:

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm

如果您更改架构以遵守shiro查询,则不需要额外配置。您需要表users,user_roles和roles_permissions。

请参阅源代码确切的列名称应如何:

https://svn.apache.org/repos/asf/shiro/trunk/core/src/main/java/org/apache/shiro/realm/jdbc/JdbcRealm.java

或者,您可以配置自己的查询以匹配.ini文件中的架构,如下所示:

jdbcRealm.authenticationQuery=<your password select statement>
jdbcRealm.userRolesQuery=<your role names for username select statement>
jdbcRealm.authenticationQuery=<your permissions for role name select statement>