👮 基于节点的权限管理系统 #3
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Total Time Spent: 3 hours 40 minutes
Due Date
LittleSheep
3 hours 40 minutes
No due date set.
Dependencies
No dependencies set.
Reference: Hypernet/Passport#3
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PowerLevel
的基于数字比大小的权限管理太过于局限了,我们打算引入一个全新的权限管理系统。PermNode
会是数据库中的一个JSONB
类型列,里面使用 Map 存储了用户的所有权限,Map 的 Key 属于权限 ID,为确保简单快速本权限系统不支持 Wildcard 匹配权限中的 Value 可以为 Boolean、Number、Array 或者 String,字符串内容可以使用通配符,具体匹配逻辑会交付给对应服务实现。
同时本权限系统可以使用
AuthTicket
中的Scope
来限制对应会话的权限,Scope
中可以使用通配符,Scope
中的权限不能超过用户持有的权限。在这个示例中
CreateInteractivePosts
的权限会为true
因为用户本身就有对应的权限,但是CreateMessagingChannels
会为false
因为用户没有对应的权限。同时
CreatePaperclipAttachments
的值即使被配置为 100000 也会被降格为 51200,因为用户权限不足。字符串和数组只会提供完全匹配的值,例如Scope
中AdministerRealms
为["solar-network", "solsynth-company"]
只会获得["solar-network"]
,不支持通配符。权限节点具体命名策略为 Upper CamelCase 大驼峰,以操作为一个单词,服务为第二个单词(Passport 内部的权限可以不用写服务名)操作对象为第三个单词(复数优先)
例如创建 Passport 领域的权限名则为
CreateRealms
,对应的值为 Boolean,其组成部分由 操作(Create
)、服务(内部被忽略)、对象(Realms
)组成再比如创建 Paperclip 附件的权限名则为
CreatePaperclipAttachments
,对应的值为 Number,用于表示允许的最大文件大小,其组成部分由 操作(Create
)、服务(Paperclip
)、对象(Attachments
)组成于 1e2d5e9f9d87b8ba27cf7fd96b0094341454ba06 提交结案