문제

사용자 권한을 처리하는 Rails 플러그인이 많이 있습니다. Hobo Gem의 구현에 깊은 인상을 받았지만 다른 부분이 아닌이 기능 만 사용할 수 있는지 확실하지 않습니다. 게이트 키퍼는 정말 영리한 구현이지만 몇 가지 버그가 있지만 충분히 작지만 아마도 직접 고칠 수 있습니다. RESTFUL_ACL은 생성을 확인하기위한 클래스 방법을 제공합니다. 즉, 해당 인스턴스에 대한 확인을 수행 할 수 없습니다 (범위를 지정할 수 있는지 확실하지 않음).

현재 사용자가 볼 수있는 것만 찾을 수있는 ActiveRecord#의 범위 버전을 제공하는 것을 원합니다. 이것은 당신이나 친구 중 한 명이 소유 한 갤러리에있는 사진 만 볼 수있을 정도로 강력해야합니다.

보너스로서, 자신의 레코드를 다른 사용자 또는 갤러리와 연결하거나 해당 레코드 생성을 포함하여 수행 할 권리가없는 생성 또는 업데이트 (이전 _* 또는 유효성 검사 단계)를 방지 할 수 있습니다.

도움이 되었습니까?

해결책 4

돌이켜 보면 호보 패턴 만 사용하겠습니다. 가장 단순하고 가장 유연합니다.

다른 팁

모델 수준에서 정말 복잡한 승인 트릭을 수행 할 수 있습니다. Declarative_authorization 플러그인. 그럼에도 불구하고, 나는 나 자신을 선호한다 Rails Authorization-Plugin -이를 사용하면 모델 수준 (예 : 누군가가 리소스의 소유자)의 역할을 정의하고 컨트롤러 수준 (예 : 리소스 또는 관리자의 소유자 만 리소스를 얻을 수 있음)의 권한을 정의합니다. 특히 깨끗한 휴식 방식을 추구하는 경우이 접근법이 훨씬 간결합니다. 이와 같은 요청이있는 경우 :

GET /posts

당신이 정말로 돌아와야 할 것은 모든 게시물, 현재 사용자의 게시물만이 아닙니다. 그 목적을 위해 다른 경로가 있어야합니다.

GET /users/:user_id/posts

여기서 : user_id는 현재 사용자의 ID로 설정되었습니다. 이 차이는 적절한 조치에서 반영되어야합니다.

def index
  user = User.find(params[:user_id]) unless params[:user_id].blank?
  @posts =
   if user
    # get all posts of a user
    user.posts.all
   else
    # get all posts 
    Post.all
   end
end

이제 여기에 실제로 가지고있는 것은 "사용자의 모든 게시물 가져 오기"와 "모든 게시물 받기"와 "모든 게시물"에 대한 다른 권한을 설정하려고합니다 (예 : Admins만이 모든 게시물을 얻을 수 있습니다. 사용자 IT 자체 또는 관리자는 사용자의 모든 게시물을 얻을 수 있습니다 ").

전적으로 자신의 역할에 따라 객체에 대한 권한을 지정할 수있는 보석이 있습니다. 여기서 볼 수 있습니다. http://github.com/nakajima/roleful/tree/master. 그것은 일종의 것에 대해 잘 작동합니다 before_filter 당신이 암시 한 접근.

사용자가 어떤 관계가있는 것에 액세스 할 수 있도록 허용하는 경우, 나는 당신이 Rails Association Proxies의 주요 후보를보고 있다고 생각합니다. 밀란 노보타의 스 니펫이 마음에 들지만 약간 수정합니다.

def index
  @posts = user_repo.posts
end

private

def user_repo
  # find_by_id is **much** faster than regular find,
  # plus it just returns nil when there's no record
  if user = User.find_by_id(params[:user_id])
    # returns the association proxy
    user.posts
  else
    # returns the class
    User
  end
end

체크 아웃 할 수 있습니다 폐쇄. 나는 아직 프로젝트에서 이것을 구현하지 않았지만 약간의 작업을 구할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top