CanCan이 원하는 것을 처리 할 수 있다고 생각합니다. 사용자가 권한을 부여한 것으로 간주되는 사항에 대해 구체적인 내용을 제공하지 않았으므로 도움이 될만한 몇 가지 방법을 알려 드리겠습니다. 제가 먼저 말하고자하는 것은 여러분이 능력 파일에 원하는 모든 객체를 전달할 수 있다는 것입니다. 이를 수행하려면 다음을 수행 : 응용 프로그램에서
def ApplicationController < ActionController::Base
def current_ability
@current_ability = CustomAbility.new(pass, in, anything, here)
end
end
/모델을 당신이 때 custom_ability.rb 정의 할이 경우
def CustomAbility
include CanCan::Ability
def initialize(anything, you, want, here)
...
end
end
를, 아무것도 = 당신이 = 통과 = 무엇을 원하는 , 여기 = 여기. 또한 권한을 부여하는 리소스에 대해 몇 가지 메서드를 호출 할 수 있습니다. CanCan은 @resource_name을로드 한 다음 승인 할 능력 파일을 입력하여 작동합니다. RESTful 라우트를 가정하여 @resource_name을로드하지만, @ resource_name에 저장하면 (즉, 사용자를 @user에 저장하는 경우) before_filter를 사용하여 쉽게 자신의 리소스를로드 할 수 있습니다.
이미 생성 된 매개 변수를 인증하는 개체에서 특정 메서드를 호출 할 수도 있습니다. 예를 들어, 다음과 같이 할 수 있습니다.
def initialize(user)
can :read, Post do |post|
!((post.readable_groups & user.groups).empty?)
end
end
기본적으로 해당 블록의 행이 false를 반환하면 권한이 부여되지 않습니다. 유일한주의 사항은 블록이 create 또는 new에서 실행되지 않는다는 것입니다. 이 문제를 해결하는 방법이 있습니다. 예를 들어 고유성 검증을 사용하여 모델 수준에서 사용자 당 하나의 게시물을 시행한다고 가정 해 보겠습니다. 이전 필터를 사용하여 post_user_id 설정을로드 한 다음 수행하십시오.
can :create, Post, valid?: true
어쨌든 도움이 되셨을 것입니다.
출처
2012-01-28 04:01:08
Max
CanCan은 귀하의 필요를 어떻게 처리하지 않습니까? 나는 OAuth에 익숙하지 않지만 작동하지 않을 이유를 생각할 수 없다. – Max
필자가 조사한 바에 따르면 CanCan은 매우 전통적인 RBAC에 대해 범위가 지정됩니다. 잠재적으로 모든 사용자를 대상으로 동적 범위 지정을 원하기 때문에 적어도 그룹화 할 수는 없습니다. (적어도 cancan에 대한 내 이해가 있습니다.) – nambrot
"동적 범위 지정"이 의미하는 바에 대해서는 약간 확신 할 수 없습니다. – Max