我试图在spree特定权限内提供一些自定义角色。 无法在任何地方找到这个答案
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”只是与用户关联的角色,即所有角色都是用户。
你可能会看到它的发展方向,零售商可以注册并出售他们自己的物品......这就是目标。
任何指针??
答案 0 :(得分:4)
对此问题的快速解决方法是将一个authorize_admin方法添加到Admin :: ProductsController decorator.rb
应用程序/控制器/ 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中的一个设置,删除此控制器的“:admin,Object”要求。
这意味着该角色必须能够访问以下产品的:admin AND:action .. ie:
应用程序/模型/ 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
应允许零售商在管理员处阅读产品。
另外不要忘记将其添加到初始化程序中:
配置/初始化/ spree.rb
Ability.register_ability(RetailerAbility)
答案 1 :(得分:2)
spree_auth_devise中有一种本地方式可以做到这一点。它没有记录,但现在是。
https://github.com/spree/spree_auth_devise部分:“在现有的Rails应用程序中使用”