如何使用cancan和devise添加角色rolify?

时间:2014-01-05 03:20:46

标签: ruby-on-rails devise cancan rolify

我知道有很多关于这个问题的问题,但没有人真正回答我正在寻找的问题。

我尝试使用rolify来定义我在cancan中的角色,我能够通过rails console创建一个管理员角色,并为新用户设置默认角色。

我的问题是如何将一批角色设置为不同的值并将这些角色分配给某些用户?

如果您有一个很好的教程来解释这个过程也会有所帮助,那么截屏视频会更受欢迎。

谢谢!

3 个答案:

答案 0 :(得分:10)

如何创建一批角色?

您可以在db / seeds.rb文件中执行此操作,该文件在每次运行rake db:seed

时执行
[:admin, :author, :contact, :user].each do |role|
  Role.find_or_create_by_name({ name: role }, without_protection: true)
end

向某人添加角色就像

一样
@user.add_role :admin

使用

检查用户是否具有某个角色
@user.has_role? :admin

而且,正如史蒂夫已经说过的那样,https://github.com/EppO/rolify文档应该让你一动不动!

答案 1 :(得分:1)

我认为你的问题比这更复杂,但简单的答案是你使用add_role。除了将角色分配给某些角色之外,您无需执行任何操作来创建角色。因此,如果Jane是全局管理员而Joe是peon,您可以使用:

User.where(name: 'Joe').add_role :peon
User.where(name: 'Jane').add_role :admin

您还可以添加与特定类或类实例相关的角色,但上述内容是您问题的最直接答案。 github上的README在教程中非常不错。

答案 2 :(得分:1)

我想指出Danny的答案中使用的方法在Rails 4中对我不起作用

我发现的工作是将它放入您的seeds.rb文件

[:admin, :author, :contact, :user].each do |role|
  Role.where({ name: role }, without_protection: true).first_or_create
end

这似乎是你使用Rails 4为我做的!这是基于这个答案above