BitzOrcas 实现了四策略授权管道,按顺序评估策略。系统默认失败关闭——如果没有评估器明确允许访问,请求被拒绝。
架构
请求 → AuthorizationPipelineBehavior │ ├── RbacPolicyEvaluator (角色 → 权限) ├── AppScopePolicyEvaluator (跨租户应用范围) ├── AbacPolicyEvaluator (上下文感知规则) └── ReBacPolicyEvaluator (关系图) │ ▼ IAuthorizationDecisionService → 允许 / 拒绝四种策略
| 评估器 | 策略 | 描述 |
|---|---|---|
RbacPolicyEvaluator | 基于角色的 AC | 通过 SysRoleModulePermission 将用户角色映射到权限 |
AppScopePolicyEvaluator | 应用范围 | 跨租户应用级权限 |
AbacPolicyEvaluator | 基于属性 | 上下文感知规则(资源所有者、时间、IP) |
ReBcPolicyEvaluator | 基于关系 | 基于图的访问(如”是频道成员”) |
RBAC 模型
主要授权模型:
用户 → 角色 → RoleType → SysRoleModulePermission → 权限权限格式
// 模块 + 动作模式"ticket.create""ticket.view""ticket.assign""chat.message.send""chat.channel.manage""file.upload"权限矩阵
通过 CSV 种子数据定义(sys_role_module_permission.csv):
| 角色类型 | ticket.create | ticket.view | ticket.assign | ticket.manage |
|---|---|---|---|---|
| Admin | ✅ | ✅ | ✅ | ✅ |
| Operator | ✅ | ✅ | ✅ | ❌ |
| EndUser | ✅ | ✅ (自己的) | ❌ | ❌ |
数据范围
IDataScopeResolver 确定用户可访问多少数据:
public enum DataScope{ Own, // 仅自己的数据(如自己的工单) Tenant, // 租户内所有数据 CrossTenant // 所有租户(管理员/审计员)}AuthorizationPipelineBehavior
在每条命令/查询上强制授权的 Mediator 管道行为:
// 在 Mediator 管道中注册(位置 2)typeof(AuthorizationPipelineBehavior<,>)它在处理器执行前评估授权决策服务。
模块级权限
每个模块定义自己的权限常量:
// Tickets 模块public static class TicketPermissions{ public const string Create = "ticket.create"; public const string View = "ticket.view"; // ...}
// Chat 模块public static class ChatPermissions{ public const string ChannelCreate = "chat.channel.create"; // ...}另见
- 身份模块 — RBAC 实体模型
- Mediator 管道图 — 管道中的授权