更新以尝试解决@philipxy的一些评论:
我计划实现类似于GitHub的权限模型。
- 用户
- 用户可以分组
- 用户可以加入组织
- 组可以加入组织
- 一个用户将被允许在资产、组或组织上执行任何 C、R、U 和 D 操作,如下所述:
- 已被授权执行这些(任何 C、R、U、D)操作的个人用户
- 已被授予权限的组的成员
- 已被授予权限的组织的成员
- 或作为属于具有权限的组织的组的成员
- 用户被授予读取权限,因为资产/组/组织对匿名用户(“公共”)可见(可读取)
- 用户还应该拥有一组权限,以说明他们是否可以在权限上执行任何 C、R、U 或 D 操作(用户可以为另一个用户、组或组织创建一个权限[C、R、U、D])。
- 用户可以设置他们创建的任何资产、组或组织的权限,或者任何他们已被授予设置权限的资产、组或组织的权限。
大致上,我该如何建模?
显然,我有以下模型:
1. 资产 2. 用户 3. 组 4. 组织
接下来呢?
1. 权限? 2. 权限类型(用于捕获C/R/U/D)?
我正在使用通过sequelize从node连接的mysql,但我可以自己弄清楚具体语法等问题,我只是还没有概念性地弄清楚如何做到这一点。
更进一步:
您提议我更多地做的事情,正是我认为需要帮助的事情。也就是说,我正在寻找那些信息设计方法(NIAM、FCO-IM、ORM2、IDEF1X)。我对关系数据库实现了解得相当多(学习规范化和标准化等),但确实将业务需求规范化并转换为可行规格的过程是一个挑战。
- ORM2
因与nodejs模块名称冲突而难以找到。: 我已经从NIAM维基百科页面链接下载了相关书籍。 - 现在似乎使用NIAM的人越来越少了?
- FCO-IM:我已经从他们的网站下载了相关书籍。
- IDEF1X:看起来也很有趣。
我想我要开始学习数据库的教材了。
更多关于谓词的工作:
U
表示一个用户A
表示一个资产G
表示一个群组- 一个用户
U
可以在 0 或多个群组G
中 O
表示一个组织- 一个用户
U
可以在 0 或多个组织O
中 - 一个群组
G
可以在 0 或多个组织O
中 - 一个资产
A
可以由一个用户U
创建 - 对于
Assets
的 CRUD 操作:- 一个实体
E
可以通过权限P
被允许执行操作Ac
在Assets
上 - 这些操作包括:
Create
Read
Update
Delete
- 该实体可以是以下类型之一:
User
Group
Organization
Anonymous User
/"the public"
- 细节(仅在
Read
中显示,但也与Create
、Update
和Delete
相关):- 一个用户
U0
可以允许另一个用户U1
读取资产A
- 一个用户
U0
可以允许属于群组G
的Users
U
读取资产A
- 一个用户
U0
可以允许属于组织O
的Users
U
读取资产A
- 在已被允许读取资产
A
的组织O
中的Group
G1
中的Users
U
因此可以读取资产A
- 一个用户
- 一个实体
- 引用资产
A
的权限P
只能由某些用户创建:- 默认情况下,创建实体的用户
U
可以为该实体创建Permissions
, - 但是他们只能引用他们拥有权限的
Assets
(在基本情况下:由U
创建的那些Assets
) - 已被授予权限的用户也可以引用实体
E
中的权限 Gr
表示一个授权- 一个授权赋予一个实体创建、读取、更新或删除引用另一个实体的权限的特权
- 像权限一样,授权具有传递性质:
- 如果组织
O
已被授予修改实体E
的权限,则 - 不仅属于
O
的成员的用户可以修改引用E
的权限,- 而且任何群组
G
,其中
- 而且任何群组
- 如果组织
- 默认情况下,创建实体的用户