我一直在研究创建访问控制列表,我发现了一些事情。但是,我不确定一种方式是否极度落伍,另一种方式过于简单化。
所以这是:
现在,我如何设置它是在users表中我有一个permissions
字段。该字段包含用户拥有的所有权限的JSON。我很好奇,想知道是否有更好的方法来做到这一点,我发现结构化数据库使用单独的表来表示角色和权限。
e.g。
role
-------------
id | name
permissions
-----------------
id | role_id | name
user_role
---------------
user_id | role_id
这是非常基本的,但总体思路。
我的问题是,哪种方法更好。对于连接以及获取权限的所有内容,表格方法似乎有点沉重。但是,当我寻找用户时,我可以拔出JSON字段并缓存它......或者是否有一些基本的东西我不知道?
答案 0 :(得分:0)
你的JSON方式看起来像Wordpress序列化,WP使用序列化来存储选项,看看这篇文章,快速举例:
Working with serialized data in Wordpress
但它用于IMHO或多或少不相关的选项,不需要过滤的选项或其他任何选项,唯一的功能是提供某些功能的配置。让我们说一些不重要的事情。
权限&角色是我认为对任何应用程序都至关重要的东西,最好的方法是使用标准表方法。您可能需要新的插入,这样更容易,或者查询具有特定权限的人,这是关系表的神奇之处。
答案 1 :(得分:0)
在使用Rational数据库时,您应该使用本机表来代替非本机数据结构。在州际公路上骑自行车是一种选择,但它是最好的选择吗?
<强>效率强>:
现代数据库服务器能够缓存重复查询的结果,因此在为您完成缓存时,为什么要浪费应用程序中的资源。大多数情况下,至少提供一个超时缓存,如果相同的查询间隔产生,则从内存返回相同的结果(假设结果没有更改值)而不需要DB读取。
字段集越大,JSON字符串占用的文件系统空间就越大,解析数据的速度就越慢,缓存结果消耗的内存就越多。使用表格,字段集在文件系统上的资源消耗将大大减少,并且使您能够仅以您的应用程序理解的方式请求已经格式化的那一刻所需的值。与JSON一样,您检索的字符串仍然需要更多操作才能被理解,不仅包含您当时需要的值,还包含您不需要的很多值。
<强>可扩展性强>:
使用存储的JSON字符串,如果您希望删除不再需要的字段或添加必填字段,则必须花费相当多的处理能力来调整每个项目的数据集。与表一样,这可以使用简短的查询命令来完成。在每次服务器遇到具有应该删除或缺少必填字段的字段的项目之后,该项目的字段将在内存中进行调整,并且将安排更新以进行批处理文件系统写入。
-
你说你担心连接速度慢/成本高,但是假设你只是请求你需要的数据只需要你需要的表,所以连接中的值与其他选项相比应该是非常小的。 / p>