2010-08-23 2 views
2

동적 역할 할당 (역할/권한)을 제공해야합니다. 최종 사용자가 역할을 만들고 새 사용자에게 권한을 할당 할 수 있어야합니다. 그래서 각 사용자에 대한 테이블에 역할과 권한을 저장하려고 생각했습니다.데이터베이스를 사용하여 Rails에서 동적 역할 권한 부여. 선언적 승인이 최선의 선택입니까?

이 작업을 수행하는 현명한 방법이 있습니까 (아니면 다른 플러그인입니까?) 또는 선언적 승인을 사용하여 코드를 작성해야합니까? 약간의 빛이 도움이 될거야. 고마워!

답변

1

이러한 해결책을 가까이하는 대답 해보십시오 :

  1. 는 역할 자체가 동적인가? 즉, 다양한 역할에 할당 된 권한을 관리자가 웹 인터페이스를 통해 변경할 수 있습니까? 그렇다면이 정보를 데이터베이스에 저장해야합니다. 예를 들어 역할이 미리 정의 된 블로그와 같은 시스템의 경우 관리자, 게스트 및 중재자 인 Declarative Authorization은 매력처럼 작동합니다.
  2. UI에 대한 사용 권한 결합 강도는 어느 정도입니까? 때로는 소셜 네트워크처럼 제한해야 할 장소가 몇 군데 있지만 권한이 훨씬 복잡하고 UI와 밀접하게 연결됩니다. 즉, 매우 긴밀히 결합 된 즉 모든 역할에 대해 하나의 작업 만 사용할 수 있지만 이러한 역할이 수행하는 작업은 해당 정의에 의해 제한되고 선언 인증 (또는 기타)이 도움이되지 않으면 레거시 시스템이 필요합니다.
+0

나는 이것이 정말로 오래되었다는 것을 알고 있지만, 레거시 시스템으로 확장 할 수 있습니까? –

+1

레거시 시스템이란 플랫폼 OP와 관련된 코드 기반 또는 규칙 집합을 의미합니다. 예 : 우리 제품 중 하나에는'DispatchManager','AccountContact' 및'SalesExecutive'가 있습니다. 모두 App의 각기 다른 권한과 역할을 가지고 있습니다. 그래서 이것을 위해 구축 한 규칙 시스템을 레거시 시스템이라고합니다. – Swanand

1

저는 최근에 프로젝트에서 CanCan을 사용했으며 매우 멋지다고 생각합니다. Ability 클래스를 만들고이를 사용하여 사용자가 작업을 수행 할 수 있는지 결정합니다. 메서드의 테이블에 사용 권한이 있는지 또는 해당 규칙 집합에서 작업을 허용하는지 확인할 수 있습니다.

내가 github의 읽어보기에서이 샘플 코드의 모든 나섭니다 : 귀하의 의견에 그런

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user.admin? 
     can :manage, :all 
    else 
     can :read, :all 
    end 
    end 
end 

및 컨트롤러 당신은

<% if can? :update, @article %> 
    <%= link_to "Edit", edit_article_path(@article) %> 
<% end %> 


def show 
    @article = Article.find(params[:id]) 
    authorize! :read, @article 
end 
1

캉캉 간단한 시작/프로젝트를 위해 중대하다 인증 수준을 확인할 수 있습니다 모 놀리 식 (monolithic) 앱을 가지고 있다면 확실히 포장해야합니다. Cancan은 초기 해결책은 아니지만 최종 해결책은되어야합니다. 정책 객체 (전문가)를 보면 코드 냄새가있을 수 있습니다. 자신 만의 인증 모델을 만들어야합니다. 통합과 같은 권한 부여는 클라이언트와 클라이언트에 따라 다르며,보다 역동적 인 솔루션을 찾고 있거나 말하는 역할이 너무 많으면 cancan이 적합하지 않습니다. 보다 데이터 중심의 보안 모델이 필요할 수 있습니다. 예를 들어 다른 사용자에게 엔티티에 대한 액세스 권한을 부여 할 수 있습니다.