如何最好地在Rails应用程序的数据库中表示角色?

雅各布

我正在我的应用程序中建立授权,并具有三个角色:

  • 用户
  • 主持人
  • 行政

用Rails表示这一点的最好方法是什么?我曾考虑过将以下布尔字段添加到用户表中:

  • is_user
  • is_moderator
  • is_admin

然后is_user?在User模型中创建等等函数。

一个用户可以有多个角色(可以是全部三个)。

本杰

我建议对访问级别使用按位值。这是有效的,因为您的角色数量有限,并且您的用户可以一次拥有多个角色。

它比使用外部gem更快,更容易维护。

想法是为每个访问级别使用一个数字值,该数字值可以在位级别进行累加。

Level     | Int val | Bit val
user      |       1 | 00000001
moderator |       2 | 00000010
admin     |       4 | 00000100
another   |       8 | 00001000
etc ...   |      16 | 00010000

因此,用户和主持人的访问级别将为1 + 2 = 3(位00000011)。然后,我们可以测试位值以定义用户access_level


1)access_level在您的用户模型中添加一列,类型为整数,默认为0

2)设置常量以定义您的访问级别值

class User < ActiveRecord::Base
  USER = 1
  MODERATOR = 2
  ADMIN = 4
end

3)创建add_access_levelremove_access_level方法

class User < ActiveRecord::Base
  # Add the desired bit
  def add_access_level(level)
    self.access_level |= level
  end
  # Removed the desired bit
  def remove_access_level(level)
    self.access_level &= ~level
  end
end

注意:由您决定将这些更改持久保存在数据库中

4)创建is_user?is_moderator?is_admin?方法

class User < ActiveRecord::Base
  def is_user?
    is_access_level? USER
  end
  def is_moderator?
    is_access_level? MODERATOR
  end
  def is_admin?
    is_access_level? ADMIN
  end

  private
    def is_access_level?(level)
      self.access_level & level == level
    end
end

注意:我会使用method_missing,但这不在我们的讨论范围内。

5)测试

u = User.new

u.is_admin?
=> false
u.is_moderator?
=> false
u.is_user?
=> false

u.add_access_level User::USER
u.add_access_level User::MODERATOR

u.is_admin?
=> false
u.is_moderator?
=> true
u.is_user?
=> true

u.remove_access_level User::MODERATOR

u.is_admin?
=> false
u.is_moderator?
=> false
u.is_user?
=> true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何有效地设计多列表应用程序的数据库

来自分类Dev

如何基于Rails on Rails 4应用程序中的答案更新数据库列

来自分类Dev

Rails应用程序与Advantage数据库的连接

来自分类Dev

Rails - 应用程序内的“数据库种子”按钮?

来自分类Dev

如何通过WCF服务在WPF应用程序调用数据库中实现基于角色的授权?

来自分类Dev

如何修改 jbpm-console 应用程序以使其从数据库中检索用户、角色和组列表?

来自分类Dev

如何在Rails应用程序中管理其他数据库中的模式

来自分类Dev

由于postgres数据库,如何分隔Rails应用程序?

来自分类Dev

启动My Ruby on Rails应用程序-如何填充数据库?

来自分类Dev

在Heroku上,如何安排Postgres数据库以使我的Rails应用程序定期重置?

来自分类Dev

如何手动为Rails应用程序创建postgres数据库?

来自分类Dev

如何在 dockerized Rails 应用程序中创建 Mysql 测试数据库?

来自分类Dev

如何在复杂的应用程序中最好地使用核心数据

来自分类Dev

如何最好地运行数据库后台操作?

来自分类Dev

如何最好地将表关联到数据库

来自分类Dev

如何最好地构建此数据库查询?

来自分类Dev

如何最好地在WPF应用程序中实现异步?

来自分类Dev

如何最好地部署此多层应用程序?

来自分类Dev

为Web应用程序(角色,用户)初始化`aspnetdb`数据库的推荐方法?

来自分类Dev

如何开发基于数据库方案的应用程序?

来自分类Dev

如何从Android应用程序读写数据库

来自分类Dev

如何在应用程序中嵌入数据库?

来自分类Dev

如何使用Android应用程序运送数据库

来自分类Dev

最好使用null或-1在数据库的整数列中表示“无穷大”

来自分类Dev

我的应用程序访问远程数据库。如何有效地运行单元测试?

来自分类Dev

数据库应用程序崩溃

来自分类Dev

如何最好地防止库(源)和应用程序(头)编译之间的(编译器)标志不匹配?

来自分类Dev

应用程序不会无限期地监听数据库连接吗?

来自分类Dev

Rails 5应用程序与Rails 4应用程序共享服务器和数据库

Related 相关文章

  1. 1

    如何有效地设计多列表应用程序的数据库

  2. 2

    如何基于Rails on Rails 4应用程序中的答案更新数据库列

  3. 3

    Rails应用程序与Advantage数据库的连接

  4. 4

    Rails - 应用程序内的“数据库种子”按钮?

  5. 5

    如何通过WCF服务在WPF应用程序调用数据库中实现基于角色的授权?

  6. 6

    如何修改 jbpm-console 应用程序以使其从数据库中检索用户、角色和组列表?

  7. 7

    如何在Rails应用程序中管理其他数据库中的模式

  8. 8

    由于postgres数据库,如何分隔Rails应用程序?

  9. 9

    启动My Ruby on Rails应用程序-如何填充数据库?

  10. 10

    在Heroku上,如何安排Postgres数据库以使我的Rails应用程序定期重置?

  11. 11

    如何手动为Rails应用程序创建postgres数据库?

  12. 12

    如何在 dockerized Rails 应用程序中创建 Mysql 测试数据库?

  13. 13

    如何在复杂的应用程序中最好地使用核心数据

  14. 14

    如何最好地运行数据库后台操作?

  15. 15

    如何最好地将表关联到数据库

  16. 16

    如何最好地构建此数据库查询?

  17. 17

    如何最好地在WPF应用程序中实现异步?

  18. 18

    如何最好地部署此多层应用程序?

  19. 19

    为Web应用程序(角色,用户)初始化`aspnetdb`数据库的推荐方法?

  20. 20

    如何开发基于数据库方案的应用程序?

  21. 21

    如何从Android应用程序读写数据库

  22. 22

    如何在应用程序中嵌入数据库?

  23. 23

    如何使用Android应用程序运送数据库

  24. 24

    最好使用null或-1在数据库的整数列中表示“无穷大”

  25. 25

    我的应用程序访问远程数据库。如何有效地运行单元测试?

  26. 26

    数据库应用程序崩溃

  27. 27

    如何最好地防止库(源)和应用程序(头)编译之间的(编译器)标志不匹配?

  28. 28

    应用程序不会无限期地监听数据库连接吗?

  29. 29

    Rails 5应用程序与Rails 4应用程序共享服务器和数据库

热门标签

归档