0

我需要帮助来定义用户角色。我已经创建了自己的身份验证,并且正在处理自定义授权。但是我需要定义用户角色。我已经创建了我的角色,但我不相信他们对他们应该做什么有任何真正的价值。

用户.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
4

3 回答 3

2

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

如果用户.admin?
// 你的授权逻辑在这里
结束

于 2013-03-16T04:16:46.713 回答
1

我会看看rolifycancan

rolify允许您轻松地为您的用户定义角色:

user = User.find(1)
user.add_role :admin

在特定类上定义角色:

user.add_role :moderator, Forum

在特定实例上定义角色:

user.add_role :moderator, Forum.first

cancan然后允许您定义能力,即 auser可以做什么。它非常适用于rolify

if user.has_role? :admin, User
  can :manage, :all
else
  can :manage, User, :id => user.id
end

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

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

两者的自述文件都gems非常好,并链接到进一步阅读。在接下来的几天里,我还将在博客中介绍一个相当完整的示例,其中涉及rolifycancan、和 Rails 观察者。该示例将展示如何创建基于状态机 ( ) 的电子邮件确认模型,使用和获取权限aasmomniauthaasmrolifycancan

于 2013-03-15T18:38:00.483 回答
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

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

于 2013-03-15T18:03:51.813 回答