【发布时间】:2016-03-08 10:32:59
【问题描述】:
我在我的 Rails 项目中使用CanCan gem 进行授权。
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版本?
rails -v -
当你有
user对象时,你怎么知道用户是partneradmin?我有user.is_partneradmin?方法吗?它是数据库中的布尔字段吗? -
@MattGibson 是的,我有
is_partner_admin?方法来检查。 -
Cancan gem 适用于我记得的 rails 3。你应该使用Cancancan,它真的很容易使用,而且比Cancan更好。
-
@Fresz 我已经在使用 'cancancan', '~> 1.8.4'
标签: ruby-on-rails ruby authorization cancan