gpt4 book ai didi

cancan - Rails - CanCan - 设置和分配角色?

转载 作者:行者123 更新时间:2023-12-04 23:59:36 32 4
gpt4 key购买 nike

如何为 CanCan 设置角色,以及如何将这些角色分配给用户?我现在至少希望在注册时有一个下拉菜单,供用户选择他们的角色。我对所有文档都不太确定,我似乎一直想念这个,但非常感谢任何帮助!

最佳答案

这是用于管理角色的可靠的适用于 Rails 的方法。我用这个。我喜欢。本质上,您创建了一个 has-and-belongs-to-many 表来关联用户和角色并定义一个函数,User#has_role?检查关联。

# file: app/models/user.rb
class User < ActiveRecord::Base
has_many :user_roles, :dependent => :destroy
has_many :roles, :through => :user_roles

def has_role?(name)
roles.pluck(:name).member?(name.to_s)
end
end

# file: app/models/role.rb
class Role < ActiveRecord::Base
has_many :user_roles, :dependent => :destroy
has_many :users, :through => :user_roles
end

# file: app/models/user_role.rb
class UserRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
end

迁移/架构文件:
# file: db/migrate/xxx_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
t.string :email, :null => false, :default => ""
# ... any other fields you want ...
t.timestamps
end
end
end

# file: db/migrate/xxx_create_roles.rb
class CreateRoles < ActiveRecord::Migration
def change
create_table :roles do |t|
t.string :name
t.timestamps
end
end
end

# file: db/migrate/xxx_create_user_roles.rb
class CreateUserRoles < ActiveRecord::Migration
def change
create_table :user_roles do |t|
t.references :user
t.references :role
t.timestamps
end
add_index :user_roles, [:user_id, :role_id], :unique => true
end
end

所以现在,您的能力文件将如下所示:
class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # support guest user
if user.has_role?(:admin)
can :manage, :all
elsif user.has_role?(:nsa)
can :read, :all
elsif user.has_role?(:editor)
# ... add other abilities here
end

end
end

需要明确的是,这并没有回答 OP 关于您首先如何创建角色的问题。但是由于用户、角色和 user_roles 现在是完整的 Rails 模型,您可以使用标准的 CRUD 工具来管理它们。但是在 90% 的情况下,您只需将管理员权限分配给一两个用户,这很容易在种子文件中完成,如下所示:
# file: db/seeds.rb

# create a role named "admin"
admin_role = Role.create!(:name => "admin")

# create an admin user
admin_user = User.create!(:email => "admin@admin.com")

# assign the admin role to the admin user. (This bit of rails
# magic creates a user_role record in the database.)
admin_user.roles << admin_role

关于cancan - Rails - CanCan - 设置和分配角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051513/

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