2009-07-07 5 views
2

rails_authorization_plugin이 모델에 포함되어 실행 중입니다.ACL을 구현할시기와 위치

내 사이트에서 권한 검사를 구현하는 가장 좋은 방법은 무엇입니까?

개체의 인스턴스를 표시해야 할 때 복잡한 조건이 있습니다. 여러 개의 데이터 집합을 가져 오지 않고 반환 된 데이터를 반복하여 내 DB를 연마하지 않도록 함께 묶는 효율적인 방법이 있습니다. 그것을 걸러 내기 위해서?

답변

1

효율적인 방법이 있습니다. 하나의 쿼리 만 실행하고 실행 한 쿼리가 원하는 개체를 정확하게 반환하는지 확인하십시오. 물론 더 쉽게 말한 것입니다.

이 문제를 처리하는 한 가지 방법은 범위를 사용하여 조건을 구성하는 것입니다.

@posts = @thread.posts.not_deleted.this_week.not_secret 

모든 메소드가 범위 인 경우 하나의 쿼리 만됩니다.

조건이 너무 복잡하여 범위를 쉽게 만들 수없는 경우 사용자에게 표시되는 개체를 반환하는 메서드를 작성해야합니다.

class User 
def posts_for(thread) 
    if is_admin? 
    thread.posts 
    elsif thread.owner == self 
    thread.posts.not_deleted 
    else 
    Post.find(:all, :conditions => something_complicated(thread, self)) 
    end 
end 
end 

내 응용 프로그램 개체 및 매우 복잡 권한의 종류를 많이 가지고, 그래서 우리는 method_missing와 같은 통화를 캡처하고 모든 다양한 쿼리를 만드는 방법을 알고있는 권한 라이브러리 경로 그들을.

+0

글쎄, 난 아주 간결한 레일 acl 플러그인을 사용하고 있지만, 나는 체인에서 사용할 수 있다고 생각하지 않습니까? activerecord의 확장과 거의 비슷한 동작을하는 ACL 플러그인이 있습니까? rails acl에 대한 설명서는 시작하기에 많은 도움이되지만 실제로 보안 검사를 구현하면 많은 추측이 남습니다. 도움을 주셔서 감사합니다. 이미 좋은 조언을드립니다. –

+0

어떤 라이브러리를 사용하고 있는지 확실하지 않습니다. 링크를 사용하고 계신지 모르겠습니다. 나는 정말로 허가 라이브러리의 분야를 모른다. 나는 우리 자신의 권한 라이브러리를 굴렸다. 왜냐하면 우리의 역할은 애플리케이션 수준의 세분성이 아니라 객체 수준의 세분성을 가지고 있기 때문에 거기에있는 플러그인은 실제로 나에게 도움이되지 못했다. –

+0

rails_acl_plugin을 확인 했습니까? 인스턴스, 클래스 및 메서드 수준 사용 권한을 수행합니다. –

관련 문제