按位访问控制列表是否被视为反模式?

时间:2012-12-19 20:12:19

标签: php user-interface

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

3 个答案:

答案 0 :(得分:2)

它节省了存储空间,并且它随处可见。例如,对于有一个人既是“编辑者”又是“经理人”的情况,它是完美的。你不应该记住8是什么权限,你应该有一个名称来引用你定义的那些数字然后不必担心。

答案 1 :(得分:1)

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

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

到处都是,在数据库中使用一堆单独的TINYINT(或类似)标志可能会好得多。从打包值到位域的存储节省不太可能是值得的麻烦。

答案 2 :(得分:0)

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

您可以充分了解项目的范围,以确保您永远不会超过32/64。

权限值的可读性不是很重要。