Ruby on rails 坎坎与能力块
我有一段代码定义了CanCan的用户权限,但我不明白块中的条件是什么Ruby on rails 坎坎与能力块,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我有一段代码定义了CanCan的用户权限,但我不明白块中的条件是什么 class Ability include CanCan::Ability def initialize(user) user.permissions.each do |permission| can permission.action.to_sym, permission.thing_type.
class Ability
include CanCan::Ability
def initialize(user)
user.permissions.each do |permission|
can permission.action.to_sym,
permission.thing_type.constantize do |thing|
thing.nil? || permission.thing_id.nil? || permission.thing_id == thing.id
end
end
end
end
所以,这几行代码让我感到困扰:
permission.thing_type.constantize do |thing|
thing.nil? || permission.thing_id.nil? || permission.thing_id == thing.id
end
我知道block用于定义复杂的条件,我猜permission.thing\u id==thing.id
的存在是为了只为选定的对象授予权限,但我看不到thing.nil?|的目的permission.thing\u id.nil?
。这是干什么用的?因此,当您将一个块传递给can
(这就是这里发生的事情)时,只有当该块返回true时,才授予权限。传递到块中的对象是用户可能有权对其执行操作的对象
这样做的目的是授予用户对类执行permission.action
的权限。如果:
东西
为零。这可能发生在create
permission这样的情况下,它不接受特定的对象(而是接受类)李>
权限。thing\u id
为零。这是处理权限
对象不指向特定对象的情况。这感觉像是第1项的另一面。它可能适用于“一揽子”权限的情况,该权限表示特定用户可以对此类的任何对象执行此操作。或对象
具有权限对象中指定的id