2

按位访问控制列表是否被视为反模式?我很好奇,因为我在我正在开发的应用程序中看到了这一点,虽然它看起来很有趣,但它有点工作,但普遍的共识是什么。我在其中看到的缺点是很难知道权限 8 是什么,因此更容易看到“编辑器”或“经理”。但按位方法似乎在技术层面上起作用。

4

3 回答 3

3

它节省了存储空间,并且在任何地方都可以使用。例如,它非常适合您有一个人既是“编辑”又是“经理”的情况。而且您不必记住权限 8 是什么,您应该拥有引用您定义一次然后不必担心的那些数字的名称。

于 2012-12-19T20:18:40.553 回答
1

这不是一个反模式,但它确实有一些重要的问题需要注意:

  • 使用位域进行访问控制使得无法有效地列出给定用户有权访问的对象。(搜索canRead = 1可以在 SQL 中建立索引,但permissions & 0x40 = 0x40不能。)
  • 整数中的位数是有限的。确保您永远不需要超过 31 个。(使用符号位很麻烦,并且 PHP 在 32 位系统上运行时没有 64 位整数。)事实上,避免将它们用于任何动态分配的内容 - - 最好只将它们用于内置权限。
  • 位掩码在数据库控制台中更难阅读。

总的来说,在数据库中使用一堆单独的TINYINT(或类似的)标志可能会好得多。将值打包到位域中所节省的存储空间不太可能值得麻烦。

于 2012-12-19T20:23:38.190 回答
0

我不知道是否有官方共识,但因为如果它没有以某种聪明的方式使用字符串,我会认为它是一种反模式,因为你会受到特定数字类型使用的位数的限制。

您可能非常了解您的项目的范围,可以确定您永远不会超过 32/64。

权限值的可读性并没有引起太多关注。

于 2012-12-19T20:16:22.540 回答