2011-04-24 6 views
2

을 설정 나는 다음과 같은 모델을 가지고 :캉캉 - 어떻게 제대로 내 응용 프로그램에서 중첩 된 자원 능력

Users 
Groups 
Permissions (user_id, group_id, role_id) 

경우 ROLE_ID 1 : 관리자, 2 :

내가 난 있는지 확인하려면 회원 CanCan을 올바르게 이해합니다. ability.rb 파일에서 그룹 관리자 (permission.role_id == 1) 만 새 그룹 권한을 업데이트/삭제/만들 수 있기를 원합니다.

permissions.role_id == 2, 회원은 그룹과 그룹의 권한을 읽을 수 있어야합니다. 그룹 권한을 파괴 할 수있는 능력을 제외하고 당신은 또한 role_id:2의 능력을 지정해야합니다

class Ability 
    include CanCan::Ability 

    def initialize(current_user, groupid_viewing) 

     current_user ||= User.new #Guest user (not signed in) 

     if groupid_viewing && current_user.try(:role, groupid_viewing) == 'Admin' 
      can :manage, Group 

      can [:create, :update], Permission do |permission| 
     current_user.try(:role, groupid_viewing) == 'Admin' 
      end 





class GroupsController < ApplicationController 
.... 
    def current_ability 
      @current_ability ||= Ability.new(current_user, params[:group_id] && params[:group_id].to_i) 
    end 


class ApplicationController < ActionController::Base 
    def current_ability 
     @current_ability ||= Ability.new(current_user, nil) #(user, group) 
    end 

답변

1

:

은 여기 내 캉캉 ability.rb 파일입니다.

if groupid_viewing && current_user.try(:role, groupid_viewing) == 'Member' 
    can :read, Group 
    can :destroy, Permission do |permission| 
     current_user.try(:role, groupid_viewing) == 'Member' 
    end 

또한 사용자가하는 방식대로 current_ability을 만들 필요가 없습니다.
구성원 또는 관리자가 생성 될 때 능력을 할당해야하는 후속 호출 후 이어야합니다.

관련 문제