👮 基于节点的权限管理系统 #3

Closed
opened 2024-05-17 04:44:38 +00:00 by LittleSheep · 2 comments
Owner

PowerLevel 的基于数字比大小的权限管理太过于局限了,我们打算引入一个全新的权限管理系统。

PermNode 会是数据库中的一个 JSONB 类型列,里面使用 Map 存储了用户的所有权限,Map 的 Key 属于权限 ID,为确保简单快速本权限系统不支持 Wildcard 匹配

{
    "CreateInteractivePosts": true,
    "CreatePaperclipAttachments": 51200,
    "AdministerRealms": ["solar-network", "fuzz*"]
}

权限中的 Value 可以为 Boolean、Number、Array 或者 String,字符串内容可以使用通配符,具体匹配逻辑会交付给对应服务实现。

同时本权限系统可以使用 AuthTicket 中的 Scope 来限制对应会话的权限,Scope 中可以使用通配符,Scope 中的权限不能超过用户持有的权限。

{
    "Create*": true,
    "CreatePaperclipAttachments": 100000
}

在这个示例中 CreateInteractivePosts 的权限会为 true 因为用户本身就有对应的权限,但是 CreateMessagingChannels 会为 false 因为用户没有对应的权限。

同时 CreatePaperclipAttachments 的值即使被配置为 100000 也会被降格为 51200,因为用户权限不足。字符串和数组只会提供完全匹配的值,例如 ScopeAdministerRealms["solar-network", "solsynth-company"] 只会获得 ["solar-network"],不支持通配符。

`PowerLevel` 的基于数字比大小的权限管理太过于局限了,我们打算引入一个全新的权限管理系统。 `PermNode` 会是数据库中的一个 `JSONB` 类型列,里面使用 Map 存储了用户的所有权限,Map 的 Key 属于权限 ID,为确保简单快速本权限系统不支持 Wildcard 匹配 ```json { "CreateInteractivePosts": true, "CreatePaperclipAttachments": 51200, "AdministerRealms": ["solar-network", "fuzz*"] } ``` 权限中的 Value 可以为 Boolean、Number、Array 或者 String,字符串内容可以使用通配符,具体匹配逻辑会交付给对应服务实现。 同时本权限系统可以使用 `AuthTicket` 中的 `Scope` 来限制对应会话的权限,`Scope` 中可以使用通配符,`Scope` 中的权限不能超过用户持有的权限。 ```json { "Create*": true, "CreatePaperclipAttachments": 100000 } ``` 在这个示例中 `CreateInteractivePosts` 的权限会为 `true` 因为用户本身就有对应的权限,但是 `CreateMessagingChannels` 会为 `false` 因为用户没有对应的权限。 同时 `CreatePaperclipAttachments` 的值即使被配置为 100000 也会被降格为 51200,因为用户权限不足。字符串和数组只会提供完全匹配的值,例如 `Scope` 中 `AdministerRealms` 为 `["solar-network", "solsynth-company"]` 只会获得 `["solar-network"]`,不支持通配符。
LittleSheep added the
Kind/Feature
Kind/Enhancement
Priority
High
labels 2024-05-17 04:45:50 +00:00
LittleSheep self-assigned this 2024-05-17 04:46:33 +00:00
Author
Owner

权限节点具体命名策略为 Upper CamelCase 大驼峰,以操作为一个单词,服务为第二个单词(Passport 内部的权限可以不用写服务名)操作对象为第三个单词(复数优先)

例如创建 Passport 领域的权限名则为 CreateRealms ,对应的值为 Boolean,其组成部分由 操作(Create)、服务(内部被忽略)、对象(Realms)组成

再比如创建 Paperclip 附件的权限名则为 CreatePaperclipAttachments,对应的值为 Number,用于表示允许的最大文件大小,其组成部分由 操作(Create)、服务(Paperclip)、对象(Attachments)组成

权限节点具体命名策略为 Upper CamelCase 大驼峰,以操作为一个单词,服务为第二个单词(Passport 内部的权限可以不用写服务名)操作对象为第三个单词(复数优先) 例如创建 Passport 领域的权限名则为 `CreateRealms` ,对应的值为 Boolean,其组成部分由 操作(`Create`)、服务(内部被忽略)、对象(`Realms`)组成 再比如创建 Paperclip 附件的权限名则为 `CreatePaperclipAttachments`,对应的值为 Number,用于表示允许的最大文件大小,其组成部分由 操作(`Create`)、服务(`Paperclip`)、对象(`Attachments`)组成
Author
Owner
于 [1e2d5e9f9d87b8ba27cf7fd96b0094341454ba06](https://git.solsynth.dev/Hydrogen/Passport/commit/1e2d5e9f9d87b8ba27cf7fd96b0094341454ba06) 提交结案
LittleSheep added spent time 2024-05-17 12:15:34 +00:00
3 hours 40 minutes
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Total Time Spent: 3 hours 40 minutes
LittleSheep
3 hours 40 minutes
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Hydrogen/Passport#3
No description provided.