gpt4 book ai didi

sql - MySQL - 对象权限结构

转载 作者:行者123 更新时间:2023-11-29 02:37:29 30 4
gpt4 key购买 nike

什么是用户的理想结构 > 对象的权限。

我看过很多关于一般权限的相关帖子,或者用户可以访问哪些部分,其中包括usersuserGroupsuserGroupRelations 或类似的东西。

在我的系统中,可以创建许多不同的对象,并且每个对象都必须能够打开或关闭。例如,以具有组和子组的密码管理器为例。

Group 1
Group 2
Group 3
Group 4
Group 5
Group 6
Group 7
Group 8
Group 9
Group 10

每个组可以包含一组密码。用户可以被授予对任何组的读、写、编辑和删除权限。可以随时创建更多组。

如果某人对某个组具有权限,我应该能够让他对所有子组具有权限或将其限制为仅该组。

我目前的想法是有一个用户表,然后是一个包含如下列的权限表:

permission_id (int) PRIMARY_KEY
user_id (int) INDEX
object_id (int) INDEX
type (varchar) INDEX
admin (bool)
read (bool)
write (bool)
edit (bool)
delete (bool)

这在过去行之有效,但我正在构建的新系统需要能够快速扩展,我不确定这是否是最佳结构。这也使得让某人拥有组的所有子组权限的想法变得更加困难。

用户/管理员的角色将有一个单独的表,这意味着他们可以更改他们可以控制的组下的用户的权限。

那么,作为一个问题,我应该使用上面的结构吗?或者有人可以指出我更好的方向吗?


编辑

另一种方法是为每种类型的对象创建一个权限表。

最佳答案

我建议您添加一个“last_update”时间戳和一个“last_updated_by_user”列,这样您就有希望在您的运行系统中跟踪对此表的更改。

您可以考虑添加权限 -- grant。具有对象授予权限的用户将能够授予其他用户对相关对象的访问权限。

小心“需要快速扩展”。如果没有实际生产经验,很难猜测放大系统真正需要什么。

此外,请注意不要让权限系统过于复杂,因为过于复杂的系统将难以验证,因此更容易破解。一个简单的系统比一个更复杂的系统更容易重构以扩大规模。

您的模式似乎将用户与对象联系起来。您希望您的主键和唯一索引是 (user_id, object_id) 吗?也就是说,您希望每个用户对每个对象都拥有零个或一个权限条目吗?如果是这样,请使用主键来强制执行,而不是使用您建议的代理 permission_id 键。

对于层次结构中存在的对象,您应该在系统范围内做出以下两种选择之一:

  1. 授予具有子对象的对象隐式授予访问权限对象,或者……

  2. 它还授予访问权限到所有子对象。

第二种选择减少了创建新子对象时显式授予权限的负担。第一种选择更安全。

第二种选择使得确定用户是否有权访问特定对象变得更加困难,因为在验证用户是否有权访问时,您必须将对象层次结构向树的根部移动,以查找对父对象的访问授权。该性能问题应该主导您的决策。您的用户会创建一些对象并经常访问它们吗?或者他们会创建很多对象和子对象并且很少访问它们吗?如果访问比创建更频繁,则您希望第一选择。在对象创建时进行权限授予开销,而不是在对象访问时进行权限搜索。

我认为第一个选择可能更好。我建议采用这种表格布局:

user_id (int)
object_id (int)
type (varchar) (not sure what you have this column for)
admin (bool)
read (bool)
write (bool)
edit (bool)
grant (bool)
delete (bool)
last_update (timestamp)
last_updated_by_user_id (int)
primary key = user_id, object_id.

您也可以使用此表格布局,并在表格中为每个对象授予每个用户的每个不同权限设置一行。如果您添加更多类型的权限,这个扩展会更容易。

user_id (int)
object_id (int)
permission_enum (admin/read/write/edit/grant/delete)
type (varchar) (not sure what you have this column for)
last_update (timestamp)
last_updated_by_user_id (int)
primary key = user_id, object_id, permission_enum

关于sql - MySQL - 对象权限结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3033431/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com