gpt4 book ai didi

ruby-on-rails-5 - 在 Rails 5 中为不同组分配用户角色的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 17:58:40 27 4
gpt4 key购买 nike

以下是没有角色的基本模型:

群体模型

    class Group < ApplicationRecord
has_many :memberships
has_many :users, through :memberships
end

用户模型

    class User < ApplicationRecord
has_many :memberships
has_many :groups, through :memberships
end

成员(member)模式

    class Membership < ApplicationRecord
belongs_to :group
belongs_to :user
end

每个组应该有 1 个(并且只有一个)owner,多个 admins(由所有者指定),以及其余的 general 成员.此外,所有权角色需要可转让。在我看来,我的选择是:

  1. 在成员资格表上创建单个属性 role 并为其分配字符串值“owner”、“manager”或“general”。 [坏]

  2. 在成员表中为“owner”、“manager”和“general”创建多个 bool 值。 [坏]

  3. 创建一个包含 1 列(“名称”)和 3 行(“所有者”、“经理”、“一般”)的 Role 模型/表,然后像这样更新我的模型:

榜样

    class Role < ApplicationRecord
has_many :memberships
has_many :users, through :memberships
has_many :groups, through :memberships
end

群体模型

    class Group < ApplicationRecord
has_many :memberships
has_many :users, through :memberships
has_many :roles, through :memberships
end

用户模型

    class User < ApplicationRecord
has_many :memberships
has_many :groups, through :memberships
has_many :roles, through :memberships
end

成员(member)模式

    class Membership < ApplicationRecord
belongs_to :group
belongs_to :user
belongs_to :role
end
  1. 直接在组模型上为各种角色创建单独的数组。这看起来真的很愚蠢,因为更新角色需要压入和拼接多个数组,而我将不得不连接多个数组来呈现一个简单的成员列表。

群体模型

    class Group < ApplicationRecord
has_many :general_memberships, class_name: 'Membership'
has_many :admin_memberships, class_name: 'Membership'
has_one :owner_membership, class_name: 'Membership'

has_many :users, through :memberships
end

用户模型

    class User < ApplicationRecord
has_many :general_memberships, class_name: 'Membership'
has_many :admin_memberships, class_name: 'Membership'
has_many :owner_memberships, class_name: 'Membership'

has_many :groups, through :memberships
end

成员(member)模式

    class Membership < ApplicationRecord
belongs_to :group
belongs_to :user
end

我知道有 CanCanCan(与 Rails 5 兼容?)和 Groupify 等优秀工具,但我想先了解我的所有选择。我认为选项 #3 可能是我最好的,至少在不使用 gem 的情况下是这样。想知道社区认为我的场景的最佳实践是什么。

最佳答案

更新

我最终采用了以下解决方案,并且在生产应用程序中对它非常满意。由于一个组只能有一个所有者,因此它为该角色使用了 belongs_to 关系。

对于成员(member)模型,我利用了事件记录枚举。由于枚举数组只包含两个值,实际上向成员模型简单地添加一个“manager” bool 值会更有效。 True 表示经理,false 表示一般。但我选择了枚举方法,因为我预计在不久的将来需要更多角色,使用枚举将非常容易添加。

群体模型

    class Group < ApplicationRecord
belongs_to :owner, class_name: 'User'
has_many :memberships
has_many :users, through :memberships
end

用户模型

    class User < ApplicationRecord
has_many :owned_groups, class_name: 'Group', :foreign_key => 'owner_id'
has_many :memberships
has_many :groups, through :memberships
end

成员(member)模式

    class Membership < ApplicationRecord
belongs_to :group
belongs_to :user

enum role: [:general, :manager]
end

关于ruby-on-rails-5 - 在 Rails 5 中为不同组分配用户角色的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972980/

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