Ruby on rails 在哪里以及如何为rails 3.1中可访问的attr_分配user:admin角色?
在中的Rails guide(导轨指南)第6.1节中,介绍了attr_的一个角色,可通过以下选项访问:as optionRuby on rails 在哪里以及如何为rails 3.1中可访问的attr_分配user:admin角色?,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,在中的Rails guide(导轨指南)第6.1节中,介绍了attr_的一个角色,可通过以下选项访问:as option attr_accessible :name, :is_admin, :as => :admin 我的问题是,如果用户登录,我可以在哪里以及如何将用户分配到:admin角色,以便她/他有权使用attr_accessible进行批量分配?我还可以定义自己的角色,例如组到更新吗?如果是的话,那么应该如何定义组更新 谢谢。正如您的链接所解释的,这是为了防止大规模分配 在rai
attr_accessible :name, :is_admin, :as => :admin
我的问题是,如果用户登录,我可以在哪里以及如何将用户分配到:admin角色,以便她/他有权使用attr_accessible进行批量分配?我还可以定义自己的角色,例如组到更新吗?如果是的话,那么应该如何定义组更新
谢谢。正如您的链接所解释的,这是为了防止大规模分配 在rails(用于更新)中,这只影响调用。您仍然可以使用或admin=方法来分配admin变量
User.first.update_attributes(:name => "Gazler", :admin => true) #this will not work
User.first.update_attribute(:admin, true) #This will work
#This will also work
user = User.first
user.admin = true
user.save
您可能想看看如何使用。可能是最常见的。看看这个方法
简而言之,它允许您仅在同时传递角色时才对属性进行asign。文档中有非常好的、易于理解的代码示例。在某种程度上,它就像一种过滤器或防护装置。您以模糊的方式使用一些技术术语,这使您对这个过程的理解变得混乱,因此我将首先澄清这些术语 在何处以及如何将用户分配到:admin角色
:as
参数中使用的“角色”不是用户角色。它是一个属性角色。这意味着,除非在设置该属性的语句中指定了该角色,否则该属性将受到保护,不会被覆盖。因此,该系统独立于任何用户系统。您的应用程序甚至不需要让用户在批量分配中拥有角色
我是否可以定义自己的角色,例如组到更新
角色在任何正式意义上都不是真正的“定义”。在任何需要角色的地方,只需使用任何符号/字符串(例如:group\u to\u update
)作为角色即可。无需提前在其他任何地方指定
下面是它的工作原理。通常,在将散列大量分配给模型属性的过程中,模型的所有属性都用作分配的散列的键。因此,如果您有一个Barn
模型和它的Barn
实例,具有三个属性horse
、cat
和rabbit
,那么:
barn.attributes = params
基本上与执行以下操作相同:
barn.horse = params[:horse]
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
现在,如果在谷仓模型上设置任何可访问的属性,则在使用体量指定时,仅会更新在那里设置的属性。例如:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit
end
将只执行以下操作:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.cat = params[:cat]
因为只有“猫”和“兔子”被设置为可访问(“马”不是)。现在考虑设置这样的属性角色:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit, :as => :banana
end
barn.assign_attributes(params, :as => user.role)
现在将只执行以下操作:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.cat = params[:cat]
但是您可以使用assign\u attributes
方法,使用特定角色分配属性。因此,您可以:
barn.assign_attributes(params, :as => :banana)
这将分配所有正常受保护的参数以及角色下受保护的所有参数:banana
:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
考虑一个具有更多属性的更长的例子:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit, :as => :banana
attr_accessible :horse, :as => :banana
attr_accessible :cow, :as => :happiness
end
对应于:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.horse = params[:horse]
barn.cat = params[:cat]
barn.cow = params[:cow]
这是:
barn.assign_attributes(params, :as => :happiness)
对应于:
barn.cat = params[:cat]
barn.rabbit = params[:rabbit]
barn.horse = params[:horse]
barn.cat = params[:cat]
barn.cow = params[:cow]
现在,如果您选择,您可以使用户角色(例如,用户模型上的“角色”列)对应于任何模型上的属性角色。所以你可以这样做:
class Barn < ActiveRecord::Base
attr_accessible :cat
attr_accessible :rabbit, :as => :banana
end
barn.assign_attributes(params, :as => user.role)
如果这个
用户
的角色恰好是香蕉
,那么(使用上一个模型示例),它将在barn上为猫、兔子和马设置属性。但这只是使用属性角色的一种方法。如果你想以不同的方式使用它们,这完全取决于你。这里你使用的是个人作业,应该一直有效。但谁可以成为管理员角色,如何成为管理员角色?我假设admin是一个可以定义的方法。不,在这种情况下,admin是用户模型上的一个属性。您可以在rails控制台中或通过类似于任何其他属性的表单来分配它。谢谢。这可能是唯一一篇详细介绍attr_角色的文章。还有一个问题,这个角色将如何阻止大规模任务的发生?黑客没有办法在URL中包含该角色吗?回答得很好。这应该在Rails文档的[指南?]中。@user938363,由您决定。该角色仅在使用:as=>任何角色时设置。您有责任确保url中的任何内容都不会直接用于该角色的现场。尽管如此,这并不是一个很大的责任;你必须有目的地让它以这种方式发生,这样它才容易受到攻击。属性角色系统甚至不必在web应用程序中使用(请参见——它将在rails控制台命令行中工作)。还有一个问题,是否有一种方法可以使用角色来控制登录用户如何编辑或创建新记录?@user938363,我真的不明白你的问题的意思。听起来您开始谈论用户角色系统,它的工作方式与属性角色系统完全不同。