개발자 가이드 | rdocs | 스크린 캐스트 1 | 스크린 캐스트 2
Cancancan은 Ruby 및 Ruby on Rails의 승인 도서관으로, 사용자가 액세스 할 수있는 자원을 제한합니다.
모든 권한은 하나 또는 다중 능력 파일로 정의 될 수 있으며 컨트롤러, 뷰 및 데이터베이스 쿼리를 통해 복제되지 않으므로 유지 보수 및 테스트를 쉽게하기 위해 권한 논리를 한 곳에 유지합니다.
두 가지 주요 부분으로 구성됩니다.
권한 부여 라이브러리 는 다른 개체에 액세스하기 위해 규칙을 정의하고 해당 권한을 확인할 수있는 도우미를 제공합니다.
Rails는 모델의 권한을 자동으로로드 및 점검하고 복제 된 코드를 줄임으로써 Rails 컨트롤러의 코드를 단순화하기 위해 도우미를 제공합니다 .
Cancancan을 후원하고 여기에 로고를 보여주고 싶습니까? 스폰서 페이지를 확인하십시오.
Cancancan을 사용하는 방법을 자세히 알아 보려면 전체 개발자 가이드로 가십시오.
이것을 보석에 추가하십시오.
gem 'cancancan'
bundle install
명령을 실행하십시오.
사용자 권한은 Ability
클래스에 정의됩니다.
rails g cancan:ability
다음은 게시물 모델을 읽기 위해 정의 된 규칙의 예를 다음과 같습니다.
class Ability
include CanCan :: Ability
def initialize ( user )
can :read , Post , public : true
return unless user . present? # additional permissions for logged in users (they can read their own posts)
can :read , Post , user : user
return unless user . admin? # additional permissions for administrators
can :read , Post
end
end
그런 다음 현재 사용자의 권한을 can?
그리고 cannot?
보기 및 컨트롤러의 방법.
<% if can? :read, @post %>
<%= link_to "View", @post %>
<% end %>
칸칸의 주요 특징 중 하나는 다른 승인 라이브러리와 비교할 때 사용자가 액세스 권한이있는 모든 객체를 검색 할 수 있다는 것입니다. 다음 :
@posts = Post . accessible_by ( current_ability )
규칙을 사용하여 사용자가 읽을 수있는 게시물 목록 만 검색되도록합니다.
authorize!
사용자가 주어진 작업을 수행 할 수없는 경우 컨트롤러의 메소드가 예외를 제기합니다.
def show
@post = Post . find ( params [ :id ] )
authorize! :read , @post
end
모든 작업에 대해 이것을 설정하는 것은 지루할 수 있으므로 load_and_authorize_resource
메소드는 RESTFUL 스타일 리소스 컨트롤러의 모든 작업을 자동으로 승인하기 위해 제공됩니다. 이전 조치를 사용하여 리소스를 인스턴스 변수에로드하고 모든 작업에 대해 승인합니다.
class PostsController < ApplicationController
load_and_authorize_resource
def show
# @post is already loaded and authorized
end
def index
# @posts is already loaded with all posts the user is authorized to read
end
end
Cancancan을 사용하는 방법을 자세히 알아 보려면 전체 개발자 가이드로 가십시오.
문서에서 해결책을 찾을 수없는 Cancancan에 관한 질문이나 의심이 있으시면 Tag Cancancan을 사용하여 StackoverFlow에 대한 질문을 열어주십시오.
버그를 찾으면 GitHub에 문제를 추가하거나 프로젝트를 포크하고 풀 요청을 보내십시오.
Cancancan은 평가를 사용하여 여러 버전의 레일과 다양한 모델 어댑터에 대해 코드 기반을 테스트합니다.
처음 개발할 때는 bundle install
실행 한 다음 다른 세트를 설치하려면 bundle exec appraisal install
실행해야합니다.
그런 다음 appraisal rake
사용하여 모든 평가 파일 (CI와 같은)을 실행하거나 특정 세트 DB='sqlite' bundle exec appraisal activerecord_5.2.2 rake
실행할 수 있습니다.
특정 파일 또는 폴더 내에서 특정 테스트 세트를 실행하려면 DB='sqlite' SPEC=path/to/file/or/folder bundle exec appraisal activerecord_5.2.2 rake
사용할 수 있습니다.
Rubymine을 사용하는 경우 RSPEC 구성 템플릿을 다음과 같이 구성하여 RSPEC 테스트를 실행할 수 있습니다.
자세한 내용은 기고를 참조하십시오.
후원자와 모든 칸칸 기고자들에게 감사드립니다. 전체 목록은 ChangElog를 참조하십시오.