BitzOrcas 通过基于 CSV 种子数据的**基于角色的访问控制(RBAC)**模型实现身份和访问管理。与传统 ASP.NET Identity 方案不同,BitzOrcas 使用与 SqlSugar 集成的轻量级自定义身份系统。
权限模型
PlatformTenant │ ▼ RoleType (Admin, Operator, EndUser 等) │ ▼ SysRole │ ▼SysRoleModulePermission (Role + Module + Permission → CRUD 矩阵) │ ▼SysModule → SysPermission核心实体
| 实体 | 表 | 用途 |
|---|---|---|
PlatformTenantEntity | platform_tenant | 租户注册(名称、状态、配置) |
SysRoleEntity | sys_role | 每租户的角色定义 |
SysRoleTypeEntity | sys_role_type | 角色类型目录(Admin、Operator 等) |
SysModuleEntity | sys_module | 权限模块目录 |
SysPermissionEntity | sys_permission | 单个权限定义 |
SysRoleModulePermissionEntity | sys_role_module_permission | 角色-权限映射 |
授权决策服务
BitzOrcas 实现了多策略授权管道:
services.AddSingleton<IAuthorizationPolicyEvaluator, RbacPolicyEvaluator>();services.AddSingleton<IAuthorizationPolicyEvaluator, AppScopePolicyEvaluator>();services.AddSingleton<IAuthorizationPolicyEvaluator, AbacPolicyEvaluator>();services.AddSingleton<IAuthorizationPolicyEvaluator, ReBacPolicyEvaluator>();services.AddScoped<IAuthorizationDecisionService, AuthorizationDecisionService>();| 评估器 | 策略 | 描述 |
|---|---|---|
RbacPolicyEvaluator | 基于角色 | 通过角色分配检查权限 |
AppScopePolicyEvaluator | 应用范围 | 跨租户应用级权限 |
AbacPolicyEvaluator | 基于属性 | 上下文感知策略评估 |
ReBacPolicyEvaluator | 基于关系 | 基于关系图的访问控制 |
种子数据
身份数据在 --init-schema --seed-demo 时从 CSV 文件种子导入:
Seeders/Assets/Identity/├── platform_tenant.csv → 默认租户注册├── sys_role.csv → 角色定义├── sys_role_type.csv → 角色类型目录├── sys_module.csv → 权限模块目录├── sys_permission.csv → 权限定义└── sys_role_module_permission.csv → 角色-权限映射每个 CSV 使用 SqlSugar 的 Storageable upsert——可安全重复运行。
认证方案
身份与三种认证方案集成(参见认证):
| 方案 | 调用方类型 | 身份来源 |
|---|---|---|
| JWT Bearer | 用户调用方 | user_id、tenant_id、roles claims |
| HMAC | 应用调用方 | 带有 TenantId 的 client_id |
| API Key | 应用调用方 | 带有 TenantId、Scopes 的 client_id |
当前用户
ICurrentUser 接口在整个应用中提供身份信息:
// 由 HttpContextCurrentUser 从 JWT claims 填充UserId → GuidTenantId → stringUserName → stringRoles → IEnumerable<string>委托(模拟登录)
BitzOrcas 通过Delegation 子系统支持操作员模拟:
DelegationTokenService— 生成模拟令牌DelegationGrantEntity— 存储授权记录DelegationTokenMiddleware— 在请求管道中验证委托令牌- 授权具有可配置的 TTL 和范围限制
数据范围解析器
public interface IDataScopeResolver{ DataScope Resolve(ICurrentUser user, string resourceTenantId);}
public enum DataScope{ Own, // 仅自己的数据 Tenant, // 租户内所有数据 CrossTenant // 跨租户(管理员/超级用户)}