我的问题绝对是理论上的,例如“这样做对吗?”。我特别是 Rails 和一般的 Ruby 新手,我正在尝试将 Cancan 自动化解决方案用于我的 Rails 应用程序。
假设我们有一个像这样的简单控制器,一对关联的视图和一个带有 DB 表的用户模型。
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
end
目标是将“index”方法的访问权限限制为除管理员之外的所有人,并允许普通用户仅查看他们自己的页面,例如允许 id==5 的用户查看页面“users/5”。对于这个范围,我为 Cancan 创建了一个能力类。这里是:
class Ability
include CanCan::Ability
def initialize user, options = {}
default_rules
if user
admin_rules(user) if user.role.eql? "admin"
player_rules(user) if user.role.eql? "player"
end
end
def admin_rules user
can :read, UsersController
end
def player_rules user
can :read, User do |user_requested|
user_requested.id == user.id
end
end
def default_rules
end
end
我的问题是:如果我没有方便的 User 类型的对象,我应该在“can”方法中使用 UsersController 作为对象吗?稍后通过控制器的“index”方法中的“authorize! :show, UsersController”应用它。还是应该以其他方式完成?谢谢你的建议。