When to Use
User needs to control what actions users can perform. Agent handles permission design, role hierarchies, policy evaluation, and access control middleware.
Quick Reference
| Topic | File |
|---|
| RBAC vs ABAC comparison | INLINECODE0 |
| Implementation patterns |
patterns.md |
| Framework middleware |
middleware.md |
Core Rules
1. Auth ≠ Authorization
- - Authentication: Who you are (login, OAuth, tokens)
- Authorization: What you can do (permissions, roles, policies)
- Never mix concerns — auth happens BEFORE authorization
2. Principle of Least Privilege
- - Default deny — explicit grants only
- Users get minimum permissions for their job
- Audit permissions periodically (revoke unused)
- Temporary elevation over permanent grants
3. Choose the Right Model
| Model | Best For | Complexity |
|---|
| ACL | Simple resource ownership | Low |
| RBAC |
Organizational hierarchies | Medium |
| ABAC | Dynamic context-based rules | High |
| ReBAC | Social graphs, sharing | High |
Start simple → evolve when needed.
4. Role Design Patterns
- - Roles represent jobs, not permissions
- Max 3 inheritance levels (admin → manager → user)
- Avoid role explosion — combine with ABAC for edge cases
- Document role definitions (what can this role DO?)
5. Permission Naming
CODEBLOCK0
Consistent naming prevents ambiguity.
6. Policy Evaluation Order
- 1. Explicit deny → always wins
- Explicit allow → checked second
- No match → default deny
- Log all denials for debugging
7. Never Hardcode
CODEBLOCK1
Roles change. Permissions are stable.
Common Traps
- - Checking roles instead of permissions → brittle when roles change
- OR logic in permissions → "can edit OR is admin" creates backdoors
- Caching permissions too long → stale grants after role changes
- Frontend-only checks → always verify server-side
- God roles → split "admin" into specific permission sets
- Circular inheritance → A inherits B inherits A crashes system
Security & Privacy
Data that stays local:
- - All documentation and patterns are reference material
- No data collection or external requests
This skill does NOT:
- - Access your codebase automatically
- Make network requests
- Store any user data
Feedback
- - If useful: INLINECODE3
- Stay updated: INLINECODE4
技能名称:授权
使用场景
用户需要控制其他用户可执行的操作。本技能负责处理权限设计、角色层级、策略评估以及访问控制中间件。
快速参考
| 主题 | 文件 |
|---|
| RBAC与ABAC对比 | models.md |
| 实现模式 |
patterns.md |
| 框架中间件 | middleware.md |
核心规则
1. 认证 ≠ 授权
- - 认证: 确认身份(登录、OAuth、令牌)
- 授权: 确定权限(许可、角色、策略)
- 切勿混淆——认证必须在授权之前完成
2. 最小权限原则
- - 默认拒绝——仅显式授权
- 用户仅获得完成工作所需的最小权限
- 定期审计权限(回收未使用的权限)
- 临时提升权限优于永久授权
3. 选择正确的模型
| 模型 | 最佳适用场景 | 复杂度 |
|---|
| ACL | 简单的资源所有权 | 低 |
| RBAC |
组织层级结构 | 中 |
| ABAC | 基于上下文的动态规则 | 高 |
| ReBAC | 社交图谱、共享场景 | 高 |
从简单开始 → 按需演进。
4. 角色设计模式
- - 角色代表职责,而非权限
- 最多3层继承(管理员 → 经理 → 用户)
- 避免角色爆炸——结合ABAC处理边界情况
- 记录角色定义(该角色能做什么?)
5. 权限命名规范
资源:操作:范围
文档:写入:本人 ← 可编辑自己的文档
文档:写入:团队 ← 可编辑团队文档
文档:删除:全部 ← 可删除任何文档
一致的命名可避免歧义。
6. 策略评估顺序
- 1. 显式拒绝 → 始终优先
- 显式允许 → 其次检查
- 无匹配 → 默认拒绝
- 记录所有拒绝情况以便调试
7. 切勿硬编码
javascript
// ❌ 错误——硬编码角色检查
if (user.role === admin) { ... }
// ✅ 正确——权限检查
if (can(user, settings:update)) { ... }
角色会变,权限更稳定。
常见陷阱
- - 检查角色而非权限 → 角色变更时系统脆弱
- 权限中使用OR逻辑 → 可编辑或为管理员会留下后门
- 权限缓存时间过长 → 角色变更后授权失效
- 仅前端检查 → 始终在服务端验证
- 超级角色 → 将管理员拆分为具体权限集
- 循环继承 → A继承B,B继承A导致系统崩溃
安全与隐私
本地存储的数据:
- - 所有文档和模式均为参考资料
- 不收集数据,不发起外部请求
本技能不会:
- - 自动访问你的代码库
- 发起网络请求
- 存储任何用户数据
反馈
- - 如果觉得有用:clawhub star authorization
- 获取更新:clawhub sync