gpt4 book ai didi

ruby-on-rails - 在设计中创建属于另一个用户的用户?

转载 作者:行者123 更新时间:2023-12-04 06:20:12 25 4
gpt4 key购买 nike

我正在尝试创建一个具有 2 个用户级别的简单博客应用程序:“作者”和“经理”

Writers属于managers,managers可以有多个writers。

作者只能查看自己的帖子,但管理员可以查看其作者发布的所有帖子。

现在我的问题是,我应该如何实现这种类型的系统?

我很确定我应该使用 Devise 来生成用户身份验证。但是我应该为每种类型的用户(作者或模型)生成单独的模型还是应该生成一个角色表?

我不知道这是否足够具体;我花了一天的时间来解决这个问题,没有看到任何解决方案,所以如果您需要了解更多信息,请告诉我,我会在评论中回答。提前致谢

最佳答案

听起来像一个带有 manager_id 的简单用户表。

create_table :users do |t|
# ...other columns...

t.integer :manager_id
end

class User < ActiveRecord::Base
# Returns all writers under this manager
has_many :writers, :class_name => 'User', :foreign_key => :manager_id

# Returns this writer's manager
belongs_to :manager, :class_name => 'User'

# Allows this user to be author of posts
has_many :posts

# Associates posts of all writers under this manager
has_many :writers_posts, :through => :writers, :class_name => 'Post'

# If user has no manager, she's a manager
def manager?
manager_id.nil?
end

# If user has a manager, she's a writer
def writer?
!manager?
end
end

这允许您对用户执行以下操作。

if @user.manager?
@user.writers # => [<User>, <User>, ...]
@user.writers_posts # => [<Post>, <Post>, ...]
end

if @user.writer?
@user.manager # => <User>
end

此实现仅通过管理员的存在来确定用户是管理员还是作者。如果用户有经理,她必须是作家。否则,她是经理。如果这不够灵活,您可以添加额外的 bool 列,指定用户是一个,另一个,甚至两者。另请注意,这只是一个具有编写器和管理器方法的 User 模型。所以你可以调用@writer.writers_posts(这不是为作家用户准备的),但你不应该。

认证

由于您拥有的只是一个常规的 User 模型,因此您可以按照任何 Devise 教程为其设置身份验证。作者和管理者都只是简单登录的用户。

授权

就权限和帖子可见性而言,这一切都归结为能够在当前用户上调用上述方法。

if current_user.manager?
current_user.writers_posts.each do |post|
# display post
end
end

坦率地说,CanCan 太过分了。您需要做的就是在 View 中添加一些 before_filter 和一些 if current_user.manager? 条件。 CanCan 更全面,根据我的经验,在大多数应用程序中它太多了。

关于ruby-on-rails - 在设计中创建属于另一个用户的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485952/

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