Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何定义用户角色_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何定义用户角色

Ruby on rails 如何定义用户角色,ruby-on-rails,Ruby On Rails,我需要有关定义用户角色的帮助。我已经创建了自己的身份验证,正在进行自定义授权。但是,我需要定义用户角色。我已经创建了我的角色,但我不相信他们在应该做的事情上有任何真正的价值 user.rb: class User < ActiveRecord::Base has_secure_password attr_accessible :password_confirmation, :about_me, :feet, :inches, :password, :birthday, :caree

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

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
class用户:create
在创建之前{generate_token(:auth_token)}
角色=%w[管理员用户来宾被禁止]
def发送密码重置
生成\u令牌(:密码\u重置\u令牌)
self.password\u reset\u sent\u at=Time.zone.now
拯救
UserMailer.password\u重置(self.deliver)
结束
def生成_令牌(列)
开始
self[column]=SecureRandom.urlsafe_base64
用户存在时结束?(列=>self[column])
结束
结束

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

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
class-ResourcesController[:new,…]
...
私有的
def check_当前_用户_是_管理员
如果当前_user.role==“admin”,则返回
重定向到错误页面
结束
结束

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

你可以在你的控制器上做类似的事情:

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
class-ResourcesController[:new,…]
...
私有的
def check_当前_用户_是_管理员
如果当前_user.role==“admin”,则返回
重定向到错误页面
结束
结束
这是一个例子,你可以做你想做的…

我会看一看,然后

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

user = User.find(1)
user.add_role :admin
定义特定类上的角色:

user.add_role :moderator, Forum
在特定实例上定义角色:

user.add_role :moderator, Forum.first
cancan
然后允许您定义能力,即
用户
可以做什么。它与
rolify
配合得非常好:

if user.has_role? :admin, User
  can :manage, :all
else
  can :manage, User, :id => user.id
end
第一个能力定义定义了管理员可以管理(即
读取
创建
更新
,以及
销毁
)一切

第二个能力定义是非管理员只能管理自己。i、 e.我只能编辑自己的电子邮件地址;我甚至不能查看你的用户记录

gems
的自述文件都非常优秀,可以链接到进一步阅读。在接下来的几天里,我还将在博客上发布一个相当完整的例子,涉及
rolify
cancan
aasm
omniauth
和Rails观察员。该示例将展示如何创建基于状态机(
aasm
)的电子邮件确认模型,使用
rolify
cancan
获取权限

我将查看并查看

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

user = User.find(1)
user.add_role :admin
定义特定类上的角色:

user.add_role :moderator, Forum
在特定实例上定义角色:

user.add_role :moderator, Forum.first
cancan
然后允许您定义能力,即
用户
可以做什么。它与
rolify
配合得非常好:

if user.has_role? :admin, User
  can :manage, :all
else
  can :manage, User, :id => user.id
end
第一个能力定义定义了管理员可以管理(即
读取
创建
更新
,以及
销毁
)一切

第二个能力定义是非管理员只能管理自己。i、 e.我只能编辑自己的电子邮件地址;我甚至不能查看你的用户记录


gems
的自述文件都非常优秀,可以链接到进一步阅读。在接下来的几天里,我还将在博客上发布一个相当完整的例子,涉及
rolify
cancan
aasm
omniauth
和Rails观察员。该示例将展示如何创建基于状态机(
aasm
)的电子邮件确认模型,使用
rolify
cancan
作为权限U可以在数据库中为每个角色放置一个布尔字段,以便直接调用

如果是user.admin?
//您的授权逻辑如下所示

end

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

如果是user.admin?
//您的授权逻辑如下所示

结束

这似乎只验证第页上的角色是否为管理员。我想定义每个角色可以做什么,因为我认为这是我的用户角色中唯一缺少的部分。这似乎只能验证页面上的角色是否为admin。我想定义每个角色可以做什么,因为我认为这是我的用户角色中唯一缺少的部分。谢谢,但这些是我不使用的gems的解决方案。我理解使用它们的建议,但对于我第一次构建应用程序,我希望从头开始进行授权。我以前设置过cancan,并且它可以正常工作,非常容易使用。但我想更多地了解授权是如何工作的。明白
rolify
可能是一个很好的地方,因此可以看看您可能会想到如何构建角色支持的示例哦,好的,我明白了。我会看一看。谢谢,但这些是我不使用的宝石解决方案。我理解使用它们的建议,但对于我第一次构建应用程序,我希望从头开始进行授权。我以前设置过cancan,并且它可以正常工作,非常容易使用。但我想更多地了解授权是如何工作的。明白
rolify
可能是一个很好的地方,因此可以看看您可能会想到如何构建角色支持的示例哦,好的,我明白了。我来看看。