2013-08-27 4 views
0

CanCan을 사용하여 사용자에게 액세스 권한을 부여하는 레일 4 응용 프로그램에서 작업 중이며 차단할 수는 있지만 제대로 작성되지 않은 것 같습니다. 의사 코드, 방법 나는 일할 수있는 능력을 원합니다. 더 효과적이고 효율적으로 작동하도록 변경할 수 있습니까? 또한 요청을 처리하는 데 오래 걸릴 수있는 불필요한 질문을 피하려고합니다.CanCan 액세스 블록

can :manage, User do |u| 
    u.id.eql?(user.id) || u.account.founders.includes(u) || u.account.collaborators.includes(u) 
end 

답변

2

거의 이미 올바른 코드가 이미 있습니다. 다음과 같이 할 수 있습니다.

==을 사용하여 비교하는 것은 Ruby의 표준입니다. eql?은 거의 사용되지 않습니다.

exists? 메서드는 데이터베이스가 경량 쿼리를 수행하고 true을 반환합니다 (데이터베이스에 해당 레코드에 해당 ID가 포함되어있는 경우). includes은 열성적으로 연결을로드하는 ActiveRecord 메서드이기 때문에 이전에 어떻게했는지 잘못되었습니다. 비슷하게 명명 된 include? 메서드를 사용했다하더라도 계정의 모든 창업자와 공동 작업자를로드 한 다음 Ruby를 사용하여 해당 컬렉션에 해당 사용자가 포함되어 있는지 확인합니다.

+1

고맙습니다. – ny95