2013-06-19 1 views
1

저는 apache shiro에서 새로운데, 아파치 시로 페이지에서 튜토리얼의 거의 60 %를 읽었습니다.apache shiro를 사용하는 권한 제어

멋진 프레임 워크이지만 내 요구 사항을 충족시킬 수 있는지 궁금합니다.

권한 기반 인증에 관심이 있습니다.

예를 들어, 사용자가 삭제 자원의 권한이있는 경우 확인하기 위해, 우리는이를 사용할 수 있습니다

우리의 응용 프로그램에서 그러나
currentUser.isPermitted("resource:delete"); 

, 심지어 사용자가 삭제 자원의 권한을 가지고, 그는 단지 수 지정된 리소스를 모두 삭제하지 말고 삭제하십시오.

예를 들어 (단지 예시) 리소스에는 createdby이라는 파일이 있으며이 리소스를 만드는 사람이 기록됩니다.

이제 사용자는 resouce:delete 권한을 가지고있는 경우 자신이 만든 리소스 만 삭제할 수 있습니다.

실제로 사용자가 삭제할 수있는 리소스 (인증 된 사용자 인 delete)는 더 많은 제약 조건에 의해 계산됩니다.

이제이 슈트에서 시로 작품을 만드는 방법은 무엇입니까?

답변

0

나는 Shiro를 탐구 해왔다. 나는 그것이 맞춤 검사를 할 수있는 수준의 유연성을 제공한다고 생각하지 않는다. 기본적으로 config 파일에 정의 된 역할과 권한을 기반으로 작동합니다.

이 기능의 경우 쿼리 패치 레벨에서이 검사를 수행하여 사용자가 삭제할 수있는 레코드 만 표시하는 것이 좋습니다. (또는) 사용자가 로그인 한 경우 삭제 단추를 표시하지 않는 UI 수준에서 조건을 추가하여 만든 것과 같습니다. 이것은 단지 제안 일뿐입니다.

+1

권한이 없는데도 사용자가 하나의 리소스에 대한 삭제 URL을 얻는 방법은 어떻습니까? – hguser

+0

서버 쪽에서 삭제 권한 검사를 추가 할 수 있습니다. – rvini

+0

http://balusc.blogspot.in/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html -이 링크가 도움이되는지 확인하십시오. jdbc를 만드는 예제가 있습니다. realm을 설정 파일에 추가하고 데이터를 쿼리에 동적으로 전달하여 권한을 확인하십시오. 나는 네가 그것에 종사하지 않았다. – rvini

3

Shiro에서이 작업을 수행 할 수 있지만 코드를 작성해야합니다. Authorizer의 서브 클래스를 작성해, 시큐러티 매니저에 삽입하거나 JdbcRealm 등의 영역 클래스의 서브 클래스를 작성합니다. 그런 다음 isPermitted 메서드를 재정의합니다. 이렇게하려면 데이터베이스 테이블이나 NoSQL 데이터베이스의 문서와 같이 사용 권한 모델에 대한 액세스 권한이 있어야합니다.

isPermitted를 호출하면 재정의 한 메소드에서 찾을 수 있도록 삭제할 리소스를 지정해야합니다.

당신이 AuthorizingRealm 서브 클래스에서 isPermitted의 메소드를 오버라이드 (override)하는 경우는 사용자의 원칙 로그인 사용자의 역할에 액세스 할 수 있습니다 : 당신이 할 수 있기 때문에이 당신에게 유연성을 상당히을 제공 말한다 : 사용자 (주) 프레드 역할 : 관리자, 관리자. 그런 다음 권한 모델은 Fred, 관리자 또는 관리자가 지정된 리소스에서 작업을 수행 할 수 있는지 여부를 결정할 수 있습니다.

희망은 당신에게 몇 가지 아이디어를 제공합니다.