我正在尝试在闪闪发行的特定权限中提供一些自定义角色。 找不到这个答案在任何地方

role_ability.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”只是与用户关联的角色,即所有角色都是用户。

你可能会看到这在哪里,零售商可以注册并销售自己的物品。嗯,这是目标。

任何指针?

有帮助吗?

解决方案

在spree_auth_devise中有一种原生方式来执行此操作。它没有记录,但现在是。

https://github.com/spree/spree_auth_devise 部分:“在现有的rails应用程序中使用“

其他提示

对此问题的快速修复将是向admin :: productsController Decorator.rb 添加authorize_admin方法

app / 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_dontroller_decorator.rb中的一个集中删除该控制器的“:admin,对象”要求。

这意味着角色必须访问:管理员和:产品的操作。IE:

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
.

应该允许零售商读取管理员上的产品。

也不要忘记将此添加到初始化程序:

配置/ initializers / spree.rb

Ability.register_ability(RetailerAbility)
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top