Rails基于角色的身份验证,角色存储在数据库中

时间:2013-03-16 15:37:36

标签: ruby-on-rails ruby gem

是否存在gem,它实现了以下内容:

  • 用户可以有很多角色
  • 每个角色都有权限组
  • 每个权限只是布尔
  • 存储在数据库中的角色和权限(最重要的)

例如,我想要这样的东西:

if current_user.can?(:read_all, :list_of_orders)
...
end

can?方法应该搜索,任何角色都可以搜索。

3 个答案:

答案 0 :(得分:1)

请参阅设计用户身份验证,您可以在那里定义您的角色:

https://github.com/plataformatec/devise

甚至更好,将它与cancan轻松结合:

https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

答案 1 :(得分:1)

你可以尝试cancan gem,它很强大

https://github.com/ryanb/cancan

例如:

<% if can? :update, @article %>
  <%= link_to "Edit", edit_article_path(@article) %>
<% end %> 

你可以在ability.rb

中定义能力
can :manage, Article  # user can perform any action on the article
can :read, :all       # user can read any object
can :manage, :all     # user can perform any action on any object

答案 2 :(得分:1)

根据Zippie的问题,我建议您使用CanCan,但您也可以使用它进行身份验证。请参阅以下有用的链接Rails 3 Authentication and Authorization with Devise and CanCan (Part 1)&amp; Rails 3 Authentication and Authorization with Devise and CanCan (Part 2)

您可能在ability.rb

中有类似的内容
class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new # guest user
   # raise user.role?(:administrator).inspect
    if user.role? :administrator

      can :manage, :all
      can :manage, User

    elsif user.role? :employee
      can :read, :all

    end

  end
end

因此,在您的观看中,您可以执行类似

的操作      

您也可以使用控制器中的can?创建必要的过滤器。