Rails 中的多种角色

发布于 2024-11-15 12:05:40 字数 104 浏览 4 评论 0原文

我想设计一个像 Basecamp 这样的基于角色的系统。用户可以是一个品牌的编辑,也可以是另一个品牌的工作人员。我正在使用 devise + cancan。我该如何针对这种情况设计数据库?谢谢。

I want to design a role based system like Basecamp. A user can be editor of a brand and also he can be a worker in another brand. I'm using devise + cancan. How can i design a database for this situation? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

在巴黎塔顶看东京樱花 2024-11-22 12:05:40

我会推荐一个榜样。在这种情况下,用户将have_and_belong_to_many :roles,而角色将have_and_belong_to_many :users。这在角色和用户之间创建了多对多关系。有关关联的更多信息,请参阅 RailsGuide。

在你的 CanCanability.rb 文件中,你可以做这样的事情(我只是猜测你的设置):

 can :manage, Brand do |brand|
  user.has_role?("brand_manager") && user.brands.include?(brand)
end

在你的 user.rb 文件中,写这样的东西会很有帮助:

def has_role?(name)
  role = Role.find_by_name(name)
  (self.roles.include?(role)) ? (return true) : (return false)
end

希望这有帮助。

I would recommend a role model. In this scenario a user would have_and_belong_to_many :roles while a role would have_and_belong_to_many :users. This creates a many to many relationship between roles and users. See this RailsGuide for more info on associations.

In your CanCan ability.rb file you can do something like this (I am just guessing at your setup):

 can :manage, Brand do |brand|
  user.has_role?("brand_manager") && user.brands.include?(brand)
end

In your user.rb file it's helpful to write something like this:

def has_role?(name)
  role = Role.find_by_name(name)
  (self.roles.include?(role)) ? (return true) : (return false)
end

Hope this helps.

魂归处 2024-11-22 12:05:40

acl_system2。它是一个旧插件,但请查看其自述文件以查看它是否能达到目的。

acl_system2. Its an old plugin, but checkout its readme file to see if it serves the purpose.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文