我使用实体用户和权限
构建了一个数据库用户(身份证,电子邮件,密码,权限) 权限(id,create_user,delete_user,user_fk)
create_user和delete_user是BOOLEAN。
关系:One-One
现在每个用户都拥有自己的权限。
我的问题是:如何使用shiro从数据库中读取权限?
答案 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。
请参阅源代码确切的列名称应如何:
或者,您可以配置自己的查询以匹配.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>