gpt4 book ai didi

ruby-on-rails-3 - CanCan 独立角色模型

转载 作者:行者123 更新时间:2023-12-03 01:45:18 25 4
gpt4 key购买 nike

我一直在关注this CanCan 中有关单独角色模型实现的指南。当用户尝试注册时,在创建分配时会引发此错误。

预期用户(#21477600),得到符号(#5785720)

我正在使用 Devise 生成的 User 以及以下 before_save 函数

class User < ActiveRecord::Base
.
.
.
def create_profile
profile = Profile.new :user_id => :id
end

def create_role
Assignment.new :user => :id, :role => Role.find_by_role("user").id
end
end

我想将用户的角色默认为“user”,但我显然做错了什么。应该如何实现?

最佳答案

不确定您是否看过此内容,但 Ryan Bates 制作了一份精彩的文档,内容涉及:

Separate Role Models

编辑:

这是我目前正在使用的。我相信您的“分配”与我的“用户角色”相同。

用户.rb

#--
# Relationship
has_many :user_roles, :dependent => :destroy, :uniq => true
has_many :roles, :through => :user_roles, :uniq => true

#--
# Instance Method

# Determine if the user has a specified role
# You can find this method at: https://github.com/ryanb/cancan/wiki/Separate-Role-Model
# Written by Ryan Bates, I added the downcase though to detect 'Admin' vs 'admin'.
# Example:
# user.has_role? :Admin
# => true
def has_role?(role_sym)
roles.any? { |role| role.name.underscore.to_sym == role_sym.downcase }
end

角色.rb

#  id         :integer(4)      not null, primary key
# name :string(255)

#--
# Relationship
has_many :user_roles, :dependent => :destroy, :uniq => true
has_many :users, :through => :user_roles, :uniq => true

用户角色.rb

#  id         :integer(4)      not null, primary key
# user_id :integer(4)
# role_id :integer(4)

#--
# Relationship
belongs_to :user
belongs_to :role

那就以我的能力吧.rb

def initialize(user)
user ||= User.new # in case of a guest
if user.has_role? :Admin # The user is an Administrator
can :manage, :all
else
can :read, :all
end
end

然后我可以轻松地分配角色,就像在我的种子文件中一样,通过执行以下操作:

# Create Users
...

# Roles
admin = Role.create!(:name => "admin")
standard = Role.create!(:name => "standard")

# UserRoles :Admin
user1.roles << admin
user2.roles << standard

因此,通过调用 user.roles << [role_name],我实际上是在创建一个 UserRole,它具有 user_id 和 role_id。

关于ruby-on-rails-3 - CanCan 独立角色模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com