cancan - Spree自定义角色权限

标签 cancan spree authorize

我正在尝试在 spree 中授予一些自定义角色特定权限。 在任何地方都找不到这个答案

角色能力.rb

class RoleAbility
 include CanCan::Ability

 def initialize(user)

 user || User.new # for guest

 if user.has_role? "admin"
   can :manage, :all
 elsif user.has_role? "retailer"
   can :manage, Product
 else
   can :read, :all
 end


 end
end

我认为这可能是一个流行的想法,让具有“经理”角色的用户仅管理产品和其他某些模型......

如果我改变

 elsif user.has_role? "retailer"
can :manage, Product

 elsif user.has_role? "retailer"
can :manage, :all

它按预期工作...我可以访问所有管理区域

我只希望“零售商”能够:管理产品! ;)

“admin”只是与用户关联的角色,即所有角色都是用户。

您可能会看到这是怎么回事,零售商可以注册并销售自己的商品..这就是目标。

有什么指点吗?

最佳答案

解决此问题的一个快速方法是将authorize_admin 方法添加到 Admin::ProductsController Decorator.rb

应用程序/ Controller /admin_products_controller_decorator.rb

Admin::ProductsController.class_eval do
    def authorize_admin
        authorize! :admin, Product
        authorize! params[:action].to_sym, Product
    end
end

注意:这将覆盖 auth/app/controllers/admin_orders_controller_decorator.rb 中设置的设置,删除此 Controller 的“:admin, Object”要求。

这意味着该角色必须有权访问产品的 :admin 和 :action .. 即:

app/models/retailer_ability.rb

class RetailerAbility
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.has_role? "retailer"
      can :read, Product
      can :admin, Product
    end
  end
end

应允许零售商在管理员上阅读产品。

另外,不要忘记将其添加到初始值设定项中:

config/initializers/spree.rb

Ability.register_ability(RetailerAbility)

关于cancan - Spree自定义角色权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455174/

相关文章:

ruby-on-rails - 使用 cancan 和 rolify 进行角色管理

ruby-on-rails - 非 RESTful Controller 中的 Cancan 授权

ruby - Spree 3.0 添加到扩展中允许的属性

ruby-on-rails - spree 商务 : User Login through API

c# - 基于路由参数的 ASP.NET Web API 基于角色的授权

ruby-on-rails - CanCanCan 仅显示用户所属的模型实例

ruby - 使用 cancan 的基于角色的授权不适用于 Rails 4 - Ruby 2.1

ruby-on-rails - Spree.config是如何实现的?

installation - 授权 USB Key 的最佳方式是什么

laravel-5 - Handler.php 第 107 行中的 HttpException : This action is unauthorized