我正在构建具有一些角色\能力分离的rails应用。我决定使用cancancan + devise,但我无法弄清楚如何设置标准用户角色?
class User < ActiveRecord::Base
ROLES = %i[admin moderator author banned]
end
答案 0 :(得分:1)
您可以在用户模型上进行回调:
class User < ActiveRecord::Base
after_create :assign_default_role
def assign_default_role
add_role(:default_role) if self.roles.blank?
end
end
如果after_create不合适,请尝试其他回调,更多信息 here
答案 1 :(得分:0)
在定义能力时,我们使用称为“用户”的能力。用于默认用户权限。换句话说,没有其他角色的用户获得默认的一组能力。
我们还使用了一组客人&#39;未登录的访问者的权限。
答案 2 :(得分:0)
您可以使用以下模式来简化Ability
课程。请注意,定义&#34;默认&#34;的规则。这里的角色非常简单,因为它只是在没有角色的用户中签名。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
# this is abitilites for anonymous user
can :read, Post
return unless user.persisted?
# ok, now we know that this user is logged in and can define common abilities
can :create, Post
# and after it we can define abilities for different roles
# user.roles here should return name of roles for user,
# like [:admin, :moderator]
user.roles.each { |role| self.public_send(role, user) if respond_to?(role) }
end
def admin(user)
# abitlites for admin here
end
def moderator(user)
# abilities for moderator here
end
end
答案 3 :(得分:0)
我会在字段或枚举中设置默认值而不是回调。
class User
include Mongoid::Document
...
field :roles, type: Array # , default: [:am]
extend Enumerize
enumerize :roles, in: [:superadmin, :am, :salesrep], multiple: true #, default: :am
end