0

我在CanCan gem for rails中找到了这段代码:

def initialize(user)
    can do |action, subject_class, subject|
      user.permissions.find_all_by_action(aliases_for_action(action)).any? do |permission|
        permission.subject_class == subject_class.to_s &&
          (subject.nil? || permission.subject_id.nil? || permission.subject_id == subject.id)
      end
    end
  end

我知道方法可以多次调用,但是参数是怎么传的呢?变量actionsubject_classsubject启动在哪里?

4

1 回答 1

0

从 cancan wiki 中给出的示例中,有以下模型:

class User < ActiveRecord::Base
  has_many :permissions
end

class Permissions < ActiveRecord::Base
  belongs_to :user
end

action,subject_class并且是表和模型subject_id上数据库中的列,用于在模型对象上自动生成方法。所以例如permissionspermissionActiveRecord

@permission = Permission.new
@permission.action = :new
@permission.subject_class = :ApplicationController
@permission.save

这会将这些数据保存在权限表中

更远,

  • action=具体操作,如索引、编辑、删除等。
  • subject_class= 是控制器的名称,如ApplicationController
  • subject_id= 可选
于 2013-05-27T07:51:07.630 回答