2016-03-08 1 views
0

Я использую для разрешения в моем проекте Rails CanCan.Как разрешить действие в контроллере с использованием возможностей CanCan?

Внешний вид что-то ability.rb файл как:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    @user = user || User.new 
    send @user.role.name.underscore unless @user.role.nil? 
    end 

    private 

    def partneradmin 
    can :manage, :all 
    cannot :access, User, role_id: @user.role.id 
    cannot :manage, Watchlist 
    can :manage, Attachment 
    end 

end 

У меня есть еще один контроллер controllers/admin/users_controller.rb который выглядит как:

class Admin::UsersController < AdminController 

    load_and_authorize_resource 

    respond_to :html, :json 

    def index 
    end 

    def new 
    end 
end 

Теперь я хочу, чтобы ограничить доступ к Admin::UsersController#index действия так partneradmin пользователь не может получить доступ к Действие. Я попытался добавить cannot :access, Admin::UsersController, но мне не повезло, поскольку я все еще могу получить доступ к странице Admin::UsersController#index.

Обратите внимание: я не хочу ограничивать доступ для всех ресурсов пользователей. Например, у меня есть PartnerAdmin::UsersController#index, и я не хочу ограничивать его, но только для Admin::UsersController#index (на основе контроллера, а не модели).

+0

Что такое рельсы? 'rails -v' – Fresz

+0

@Fresz Rails 4.1.1. –

+0

Как вы можете определить, является ли пользователь 'partneradmin', когда у вас есть объект' user'? Я там 'user.is_partneradmin?' Методы? Это булевское поле в БД? –

ответ

0

мне пришлось добавить cannot :index, AdminController так ability.rb будет выглядеть:

def partneradmin 
    can :manage, :all 
    cannot :access, User, role_id: @user.role.id 
    cannot :manage, Watchlist 
    can :manage, Attachment 
    cannot :index, AdminController 
    end 

Затем добавить authorize_resource :class => AdminController в контроллере.

Смежные вопросы