그냥 (마지막으로 :) acl9에 대한 답변입니다.
Acl9는 사용자가 컨트롤러에 넣는 모든 권한 항목 인 Access Control Subsystem과 인증 된 사용자로부터 역할을 설정/확인/제거하고있는 Role Subsystem으로 구성됩니다.
액세스 제어 서브 시스템 이제까지 호출 current_user.has_role?(role, obj=nil)
것을 유일한. 따라서 역할 서브 시스템은 ActiveRecord, 연관성, 데이터베이스 등에 대한 의존성이 제로입니다. 은이고 ActiveRecord 종속적 인 has_role?
메서드를 클래스에 추가하는 도우미()입니다.하지만 이는 전적으로 선택 사항이므로 구현할 수 있습니다. 자신의 has_role?
메소드 (또한 super
을 호출하여 acl9를 호출 할 수 있음)를 사용하고 액세스 확인을 구현하십시오. 따라서 은으로 사용자 모델을 유지하지만 사용자의 역할이 학교의 관리자가되기를 원하지만 그 학교는 일부 원격 시스템에 대한 웹 서비스 호출이라고 가정 해 보겠습니다.
## in your model
class User < ActiveRecord::Base
def has_role? role, obj=nil
role == :admin &&
obj == school &&
school[:admin] == id # <-- just making up how we know we're the admin of the remote school
end
end
def school
@school ||= School.get_by_user_id(id)
end
end
## in your controller
class SomeController < ApplicationController
before_action :set_school
access_control do
allow :admin, of: :school
end
private
def set_school
@school = School.get_by_id(params[:school_id])
end
end