👮 基于节点的权限管理系统 #3
Labels
No Label
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
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: Hydrogen/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 提交结案