2012-11-19 3 views
2

강사가 각 학교의 범위에서 교실을 관리 할 수있는 학교 시스템을 구축 중입니다. 이 새로운 기록을 관리 할 강사를 활성화해야합니다 이론적으로레일 3 CanCan 권한 범위 소유

class Ability 
    include CanCan::Ability 

    #define the user ability 
    def initialize(user) 
    user ||= User.new # guest user (not logged in)  
    if user.has_role? :instructor 
     can :manage, Classroom do |classroom| 
     classroom.new_record? && classroom.school_id == user.school_id || classroom.instructor == user 
     end 
    end 
    end 

end 

이있는 강사의 설정과의 관계가되지 않습니다 너무 오래 강사와 새로운 모두 같이

나는 일치하도록 다음과 같은 기능의 설정을 가지고 교실은 같은 학교에 속합니다.

내 교실에서 새로운 조치로 부모 학교로부터 교실을 지어이 @classroom = @school.classrooms.build을 수용합니다. 그러면 새 클래스 룸 레코드가 school_id로 초기화되어 강사가 레코드를 관리 할 수 ​​있습니다. 그러나 내 교실 콘트롤러에서 교실 관계에 대한 학교가 결정되기 전에 강사를 승인하고 CanCan 인증 예외가 발생하는 load_and_authorize_resource으로 전화합니다.

이 문제가 발생합니까?

답변

3

CanCan은 학교와의 관계가 구축되기 전에 아마 능력을 검사 할 것입니다.

can :create, Classroom 
can :manage, Classroom, instructor_id: user.id 

을하고 교실 유효성 검사에서 강사의 학교에 속한다는 것을 확인하십시오 당신은 명시 적으로 생성하고 관리 권한을 깰 수 있습니다.

+0

당연히, 나는 나의 승인을 위해 cancan에 조금 지나치게 의존하고 있었다고 생각한다. 한가지주의 할 점은 can can manage, Classroom, instructor == user라는 구문은 cancan 1.6.8에서 작동하지 않는 것 같아요. 정의되지 않은 지역 변수 또는 메소드 강사를 얻습니다. 교실의 내부에서 잘 작동하지만 차단하십시오. – Noz

+0

구문은 속성이 아니라 연결과 작동 할 수 있습니다. 편집 된 버전을 사용해보십시오. – Thilo

+0

좋은 시도이지만 여전히 주사위가 없습니다. 조금 더 장황한 것은 큰 문제는 아니지만. – Noz