如何定义用户角色
我需要帮助定义用户角色。 我创建了自己的身份validation,正在进行自定义授权。 但是我需要定义用户角色。 我创建了自己的角色,但我不认为他们应该做的确切具有任何真正的价值。
user.rb:
class User :create before_create { generate_token(:auth_token) } ROLES = %w[admin user guest banned] def send_password_reset generate_token(:password_reset_token) self.password_reset_sent_at = Time.zone.now save! UserMailer.password_reset(self).deliver end def generate_token(column) begin self[column] = SecureRandom.urlsafe_base64 end while User.exists?(column => self[column]) end end
U可以为数据库中的每个角色放置一个布尔字段,以便您可以直接调用
如果user.admin?
//你的授权逻辑就在这里
结束
我会看看rolify
和cancan
。
rolify
允许您轻松为用户定义角色:
user = User.find(1) user.add_role :admin
定义特定类的角色:
user.add_role :moderator, Forum
定义特定实例的角色:
user.add_role :moderator, Forum.first
cancan
然后允许您定义能力,即user
可以做什么。 它适用于rolify
:
if user.has_role? :admin, User can :manage, :all else can :manage, User, :id => user.id end
第一个能力定义定义管理员可以管理(即read
, create
, update
和destroy
)所有内容。
第二个能力定义表明非管理员只能管理自己。 即我只能编辑自己的电子邮件地址; 我甚至无法查看您的用户记录!
两种gems
的自述文件都非常出色,并与进一步阅读相关联。 我还将在博客中写一篇相当完整的例子,其中包括rolify
, cancan
, aasm
, omniauth
和Rails Observers。 该示例将演示如何使用rolify
和cancan
创建基于状态机( aasm
)的电子邮件确认模型
您可以在控制器上执行类似的操作:
class ResourcesController < ApplicationController before_filter :check_current_user_is_admin, :only => [:new,...] ... private def check_current_user_is_admin return if current_user.role == 'admin' redirect_to error_page end end
这是一个例子,你可以做你想要的……