2013-03-11 5 views
1

Я работаю с разрешением cancan gem.Как способность Cancan обрабатывать две пользовательские модели

Как я могу получить «CANCAN» для управления разрешением для двух моделей?

благодаря

==================================

я могу сделать это ????

class Ability 

    include CanCan::Ability 

    def initialize(user) 
    # code 
    end 

    def initialize(accounts) 
    #code 
    end 
end 
+0

https://github.com/ryanb/cancan/wiki/changing-defaults – bdares

+0

Вы имеете в виду два различных типа пользователей? Оба отвечают на current_user? Или только две способности, основанные на чем-то другом? – Leito

ответ

2

Необходимо указать, какие модели могут управлять некоторыми пользователями и выполнять действия в вашем файле возможностей.rb.

class Ability 
    include CanCan::Ability 

    # usual setup 
    def initialize(user) 
    user ||= User.new 

    if user.has_role? :admin 
     can :manage, :all 
    end 

    if user.has_role? :less_important_role 
     can [:read, :update], Model1 
     can :manage, Model2 
    end 
    end 
end 

Извлекает docs, чтобы прочитать больше об определении способностей.

+0

В качестве примера я использовал способность модели пользователя и учетной записи для пользователей, что является лучшим способом решить эту проблему. def initialize (пользователь) def initialize (accounts) ???? Спасибо !!! –

+0

CanCan не был создан для поддержки [двух разных моделей] (https://github.com/kristianmandrup/cantango/wiki/CanCan-vs-CanTango) в одно и то же время, но он может поддерживать разные типы одиночной модели. Если вам действительно нужно настроить разрешения для двух отдельных моделей, вы должны проверить [CanTango] (https://github.com/kristianmandrup/cantango), который расширяет многие функции CanCan. Я не знаком с ним, но, возможно, стоит посмотреть. Кроме того, подумайте, действительно ли вам нужно отслеживать модели учетных записей с полным набором ролей или просто достаточно одного метода или двух в модели Account. –

4
class ApplicationHelper 
    def current_auth_resource 
    if admin_signed_in? 
     current_admin 
    else 
     current_user 
    end 
    end 

    def current_ability 
     @current_ability or @current_ability = Ability.new(current_auth_resource) 
    end 
end 

class ApplicationController 
    include ApplicationHelper 
end 

class Ability 
    include CanCan::Ability 

    def initialize(user)  
    if user.is_a?(Admin) 
     # add admin permissions only 
    elsif user.is_a?(User) 
     # add user permissions only 
    else 
     # add guest permissions only 
    end 
    end 
end 

проверка this