2009-12-21 4 views
1

내 프로젝트 중 하나에서 authlogic 위에 acl9를 사용하고 있습니다. 나는 acl9 접근법을 좋아하지만, 나는 그렇게 단순하지 않은 (불가능하다고 말하지 않는) 일을하려고 노력하고 있다고 생각한다.acl9 : 사전 승인 결정

유용성을 이유로 인라인 관리자 패널을 갖고 싶습니다. 예를 들어 리소스 옥션과 중첩 된 리소스 경매/입찰이 있다고 가정 해 보겠습니다. 일반 사용자가 경매/1 (1 = id)에있을 때 "정상"항목 (설명, 가격 ...)을보아야 할 경우 동일한 사이트의 권한있는 사용자는 경매를 편집하기위한 추가 링크가 있어야합니다 (= 경매/1/편집). 그리고 이것은 재미가 시작되는 곳입니다.

어쩌면 내가 가까이에서 또는 잘못된 장소를 보지 않았지만 현재 사용자가 편집 작업을 할 권한이 있는지를 판단 할 방법을 찾지 못했습니다. 분명히 모든 사람에게 링크를 표시하고 편집 작업이 일반 사용자를 거부하도록 할 수는 있지만 가능한 옵션은 아닙니다. 내가 여기있는 버그는 정보가 이미 시스템에 있다는 것입니다 (아래의 access_control 블록 참조). 나는 그것을 사용할 방법을 찾을 수없는 것 같습니다. 이렇게 많은 수준에서 건조하지 않습니다.

access_control do 
    allow :privileged, :to => [:index, :show, :edit, :update] 
    allow anonymous, :to => [:new, :show, :create] 
end 

그것은이 완전히 다른 컨트롤러이기 때문에 사용자가 auctions/1/bids/2/edit에 가지고있는 권리를 확인하려는 경우 더 악화된다.

미리 정보에 액세스 한 다음 편집 링크를 표시할지 여부를 어떻게 결정할 수 있습니까? 그것은 불가능합니다 (acl9 자체를 변경하지 않고) 아니면 충분히 열심히 보지 않았습니까? 내 요구 사항을 충족하는 인증 플러그인이 있습니까?

답변

1

"사전에"액세스하면 무엇을 의미합니까? 다른 사용자를 위해 다른 템플릿을 렌더링하고 싶습니까, 아니면 사용자의 액세스 수준에 따라 템플릿의 일부를 숨기거나 표시하는 조건부 템플릿 만 있습니까? 나는 코드 나 템플릿 같은 것을 가진 것처럼 간단 할 것으로 판단 :

if current_user.has_role?(:privileged) 
    # here goes the stuff that should be displayed to privileged user only 
end 

는 "편집 액세스하려면이 사용자 I 허용 가지고있는 것처럼 (템플릿에 규칙의 특정 설정에 액세스해야하는 경우 액션? ") 당신은 acl9로 할 수 없습니다. 그리고 나는 어쨌든 그것을하지 말아야한다고 믿습니다. 비즈니스 로직과 컨트롤러를 컨트롤러에 묶는 것이 좋지 않은 것처럼 보입니다. 내일 컨트롤러의 이름을 바꾸려면 로직이 실패 할 것입니다. 그러나 두 가지 방법으로 문제를 해결할 수 있습니다.

  1. 더 자세한 역할로 나누십시오. 예를 들어 "권한있는"권한을 "편집자", "작성자", "Deleter"등으로 나눌 수 있습니다. 따라서 이러한 작은 규칙으로 액세스 규칙을 작성하고 템플릿에 사용하여 미세한 제어가 가능합니다.

  2. 대리인 역할은 개체를 확인합니다. 이것이 내 프로젝트에서 일반적으로하는 방법입니다. 글로벌 역할만으로 작업 할 수 있고 사용자가 무언가를 할 수 있는지 (예 : if @auction.allows_edit_for?(current_user) {}) 모델이 결정할 수 있습니다. 그것은 acl9에 대한 몇 가지 재정의가 필요합니다, 나는이 방법에 대해 블로그를했습니다 here 얼마 전에.