如何定义用户角色

时间:2013-03-15 18:00:04

标签: ruby-on-rails

我需要帮助定义用户角色。我创建了自己的身份验证,正在进行自定义授权。但是我需要定义用户角色。我已经创建了自己的角色,但我认为他们没有任何真正的价值,正是他们应该做的。

user.rb:

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :password_confirmation, :about_me, :feet, :inches, :password, :birthday, :career, :children, :education, :email, :ethnicity, :gender, :height, :name, :password_digest, :politics, :religion, :sexuality, :user_drink, :user_smoke, :username, :zip_code
  validates_uniqueness_of :email
  validates_presence_of :password, :on => :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

3 个答案:

答案 0 :(得分:2)

U可以为您的数据库中的每个角色放置一个布尔字段,以便您可以直接调用

如果user.admin?
//你的授权逻辑就在这里 端

答案 1 :(得分:1)

我会看一下rolifycancan

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

第一个能力定义定义管理员可以管理(readcreateupdatedestroy)所有内容。

第二种能力定义表明非管理员只能管理自己。即我只能编辑自己的电子邮件地址;我甚至无法查看您的用户记录!

两个gems的自述文件都非常出色,可以进一步阅读。我还将在博客中写一篇相当完整的示例,其中涉及rolifycancanaasmomniauth和Rails Observers。该示例将演示如何使用aasmrolify创建基于状态机(cancan)的电子邮件确认模型

答案 2 :(得分:0)

您可以在控制器上执行类似的操作:

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

这是一个例子,你可以做你想做的......