我建立了一個數據庫,與實體相關的用戶和權限Apache Shiro爲每個用戶提供不同的權限?
用戶(ID,郵箱,密碼,權限) 許可(ID,create_user,DELETE_USER,user_fk)
create_user和DELETE_USER是布爾值。
關係:一對一
現在每個用戶都可以有它自己的權限。
我的問題是:如何使用shiro從數據庫中讀取權限?
我建立了一個數據庫,與實體相關的用戶和權限Apache Shiro爲每個用戶提供不同的權限?
用戶(ID,郵箱,密碼,權限) 許可(ID,create_user,DELETE_USER,user_fk)
create_user和DELETE_USER是布爾值。
關係:一對一
現在每個用戶都可以有它自己的權限。
我的問題是:如何使用shiro從數據庫中讀取權限?
您應在.ini文件中配置一個JdbcReam:
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
如果你改變你的模式堅持四郎查詢,不需要額外的配置。您需要表用戶,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>
如果你真的只想分配用戶級別的權限,你可以「僞造」角色表,讓四郎快樂。
正如Wouter提到的,使用JdbcRealm
併爲您的表格設置指定3個查詢。 你應該修改權限表有這樣的結構:
permission (id, permissionname, user_fk)
然後根據需要插入的create_user/DELETE_USER權利行。 通過這種方式,向設置添加另一個權限(例如reset_password)非常簡單,無需修改數據庫模式。
在shiro.ini(或你如何調用你四郎配置文件):
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)並返回關聯的權限。
這太棒了! – xwb1989