Rolify:一个用户能否将特定的资源角色分配给另一个用户?
Rolify: Can a User assign a specific Resource Role to another User?
我正在尝试确定在使用 Rolify(使用 Devise 和 CanCanCan)时此流程是否可行...如果可行,将如何实施:
我有一个class,Shop
,属于User
。我希望创建相应 Shop
实例的用户能够将 Rolify 角色 (:manager
) 分配给任何用户 (N.B。任何创建实例的用户都应该能够分配角色 - 不仅仅是具有角色 :admin
).
的用户
我知道这可以通过 rails 控制台通过 add_role
命令实现(例如,使用带有 id: 5
的 Shop
实例):
user.add_role :manage, Shop.find(5)
但我不清楚这是否可以由个人用户以编程方式完成 - 一个用户可以将角色分配给另一个用户。具体来说,通过从可搜索的下拉表单中选择用户并在提交时分配角色。
虽然我还没有任何值得展示/有助于展示的代码,但我希望在这里得到关于如何最好地解决这个问题的指导(例如,是否应该在 shops_controller.rb
或在它自己的控制器中?)。另外,是否完全放弃使用 Rolify 并为 shops_managers 创建一个连接 table 会更好?
如果有帮助,这里是 Ability.rb
class:
class Ability
include CanCan::Ability
def initialize(user)
if user
if user.has_role? :admin
can :manage, :all
else
can [:edit, :update], Shop.with_role(:manager, user)
can :manage, Shop, :user_id => user.id
can :manage, User, id: user.id
can :read, :all
end
end
end
非常感谢!
您不需要加入 table 来存储 shops_managers。你有一个榜样:
Role(id: integer, name: string, resource_id: integer, resource_type: string, created_at: datetime, updated_at: datetime)
在 shops#create 中添加角色是完全没问题的:
if @shop.save
#some code
@current_user.add_role :manager, @shop
#some more code
end
如果你想管理角色,应该在其他控制器中完成。可能在 admins 命名空间中。
我正在尝试确定在使用 Rolify(使用 Devise 和 CanCanCan)时此流程是否可行...如果可行,将如何实施:
我有一个class,Shop
,属于User
。我希望创建相应 Shop
实例的用户能够将 Rolify 角色 (:manager
) 分配给任何用户 (N.B。任何创建实例的用户都应该能够分配角色 - 不仅仅是具有角色 :admin
).
我知道这可以通过 rails 控制台通过 add_role
命令实现(例如,使用带有 id: 5
的 Shop
实例):
user.add_role :manage, Shop.find(5)
但我不清楚这是否可以由个人用户以编程方式完成 - 一个用户可以将角色分配给另一个用户。具体来说,通过从可搜索的下拉表单中选择用户并在提交时分配角色。
虽然我还没有任何值得展示/有助于展示的代码,但我希望在这里得到关于如何最好地解决这个问题的指导(例如,是否应该在 shops_controller.rb
或在它自己的控制器中?)。另外,是否完全放弃使用 Rolify 并为 shops_managers 创建一个连接 table 会更好?
如果有帮助,这里是 Ability.rb
class:
class Ability
include CanCan::Ability
def initialize(user)
if user
if user.has_role? :admin
can :manage, :all
else
can [:edit, :update], Shop.with_role(:manager, user)
can :manage, Shop, :user_id => user.id
can :manage, User, id: user.id
can :read, :all
end
end
end
非常感谢!
您不需要加入 table 来存储 shops_managers。你有一个榜样:
Role(id: integer, name: string, resource_id: integer, resource_type: string, created_at: datetime, updated_at: datetime)
在 shops#create 中添加角色是完全没问题的:
if @shop.save
#some code
@current_user.add_role :manager, @shop
#some more code
end
如果你想管理角色,应该在其他控制器中完成。可能在 admins 命名空间中。