【问题标题】:Rails / CanCan: Authorization for multiple resources?Rails / CanCan:多个资源的授权?
【发布时间】:2013-08-03 19:19:14
【问题描述】:

我正在构建一个 Rails 应用程序,该应用程序具有两种不同的资源,代表用户类型 - 租户和房东。

我通过 Devise 设置了身份验证,并使用 CanCan 对其中一个资源进行了授权。

我不想让它们成为同一个用户资源的类型,因为它们与应用程序中的其他资源有不同的关系(例如,属性属于_房东,但拥有_多租户)。

我找到了很多关于如何为具有多个角色的单个资源(例如,具有管理员角色的用户)设置 Cancan 的信息,但是对于如何同时处理多个资源的授权却一无所知时间。

谁能指出我正确的方向?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 cancan


    【解决方案1】:

    从我的脑海中,你可以做这样的事情:

    --models>>ability.rb:

    class Ability
      include CanCan::Ability
    
      def initialize(user)
    
        if user.class.name=='Landlord' 
          can :manage, :all   
        elif user.class.name=='Tenant'
          can :read, :all
        else
         can :read, :all
        end
    
      end
    end
    

    【讨论】:

      【解决方案2】:

      您可以将role 列添加到users 表并使用不同的角色填充此字段。

      $ rails generate migration AddRoleToUsers role:string
      

      更新models/ability.rb文件自定义授权:

      class Ability
        include CanCan::Ability
      
        def initialize(user)
          if user.nil?
            can :read, :all
          elsif user.role == "landlord"
            can :manage, :all
          elsif user.role == "tenant"
            can :read, :all
            can :create, ToDoList
            can :update, ToDoList do |to_do_list|
              to_do_list.user == user
            end
            can :destroy, ToDoList do |to_do_list|
              to_do_list.user == user
            end
          end
        end
      end
      

      【讨论】:

      • 如果你这样做,我会推荐easy_roles gem。 github上有,很方便。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      相关资源
      最近更新 更多