2013-10-30 2 views
4

나는 엔티티 사용자 허가모든 사용자에 대해 Apache Shiro의 권한이 다릅니 까?

사용자 (아이디, 이메일, 비밀번호, 허가) 허가 (ID, CREATE_USER, delete_user, user_fk)

CREATE_USER 및 delete_user가 BOOLEAN 인으로 데이터베이스를 구축.

관계 : 원 클릭

이제 모든 사용자는 자신의 권한을 소유 할 수 있습니다.

내 질문은 : 어떻게 shiro 데이터베이스에서 사용 권한을 읽을 수 있습니까?

답변

4

당신은 당신의 .ini 파일에 JdbcReam을 구성해야합니다

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

당신이 시로 질의을 준수하는 스키마를 변경하는 경우

는 여분의 설정이 필요하지 않습니다. 테이블 사용자, 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> 
5

정말로 사용자 수준에서만 사용 권한을 할당하려는 경우 Shiro를 행복하게 만들기 위해 역할 테이블을 "속일"수 있습니다.

언급 한대로 JdbcRealm을 사용하고 테이블 설정에 3 가지 쿼리를 지정하십시오. 당신은이 구조가 당신의 권한 테이블을 수정해야합니다 : 필요에 따라

permission (id, permissionname, user_fk) 

는 그런 다음 CREATE_USER/delete_user 권한에 대한 행을 삽입합니다. 이렇게하면 DB 스키마를 수정할 필요없이 설정에 다른 권한 (예 : reset_password)을 추가하는 것이 매우 간단합니다. shiro.ini에서

(또는 당신이 당신의 시로 구성 파일 호출 방법) :

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

셋업에서 작은 트릭은 다음과 같습니다 쿼리에 대한

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

를이 다음 사용 당신은 전혀 역할을 가지고 있지 않으므로 사용자의 ID를 역할 이름으로 반환 할뿐입니다. 권한 테이블의 조회가 완료되면 역할 이름 (= user pk)을 사용하고 연관된 사용 권한을 반환합니다.

+1

이것은 훌륭합니다! – xwb1989

관련 문제