Я использую для разрешения в моем проекте 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
(на основе контроллера, а не модели).
Что такое рельсы? 'rails -v' – Fresz
@Fresz Rails 4.1.1. –
Как вы можете определить, является ли пользователь 'partneradmin', когда у вас есть объект' user'? Я там 'user.is_partneradmin?' Методы? Это булевское поле в БД? –