2016-05-30 88 views
0

這裏是東西: 我想有這樣的角色的用戶:配置Apache四郎權限

表用戶: ID |用戶名| ROLE_ID

表的角色: ID |名稱| add_users | add_customers | configure_mail | ... | ... | ...

權限是二進制類型,當用戶可以執行操作時它具有1或者它有0否則。

在我shiro.ini我有疑問:

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.authenticationQuery = SELECT password from users where username = ? 
jdbcRealm.userRolesQuery = select name from roles where id = (select role_id FROM users WHERE username = ?) 

有沒有辦法做到這一點? 我已經搜索了幾天了。我將衷心感謝您的幫助。 在此先感謝你們。

回答

0

我明白了!。 由於開發,他真的幫我解決這個問題,這裏是解決方案(shiro.ini)

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.permissionsLookupEnabled = true 
jdbcRealm.authenticationQuery = SELECT password from users where username = ? 
jdbcRealm.userRolesQuery = select id from roles where id = (select role_id FROM users WHERE username = ?) 
jdbcRealm.permissionsQuery = SELECT name FROM permissions WHERE UPPER(role_id)=UPPER(?) 

我希望這將幫助別人的未來,並感謝您的幫助@dev

2

不要你天衣它能夠更好地保存許可另一個表,以便你有範圍,修改並進一步加強像

Table users: id|username|role_id 

Table roles: id|name 

Table permission: permission|role 

now in permission table 
customer:add,04 -- 04 is role 
mail:configure,04 
..... 

所以四郎INI

jdbcRealm.permissionsQuery = SELECT permid FROM apppermissions WHERE UPPER(roleid)=UPPER(?) 
jdbcRealm.permissionsLookupEnabled = true 
+0

你好開發。我做了以下: **表用戶:id | username | role_id ** **表角色:id |名稱** **表權限:id |名稱| role_id ** 而apache shiro.ini : ** jdbcRealm.authenticationQuery =從用戶名中選擇密碼username =? jdbcRealm.userRolesQuery =選擇從角色名其中id =(選擇ROLE_ID從用戶其中username =?) jdbcRealm.permissionsQuery =選擇的名字從權限WHERE UPPER(ROLE_ID)= UPPER(?)** 它不'噸工作,當我這樣做:** System.out.println(currentUser.isPermitted(「customer:add」)); ** 它顯示錯誤,你知道爲什麼會發生這種情況? –

+0

它應該工作檢查,如果你在shiro.ini中有這個jdbcRealm.permissionsLookupEnabled = true – dev

+0

現在完全正常工作!!!!!,非常感謝你...我真的很感激你做了什麼:D –