Skip to content
bitzorcas
EN

Reference

身份模块

平台身份系统 — 基于角色、模块、权限、角色类型、平台租户的 RBAC 权限模型,以及基于 CSV 的种子数据管理。

Last updated

BitzOrcas 通过基于 CSV 种子数据的**基于角色的访问控制(RBAC)**模型实现身份和访问管理。与传统 ASP.NET Identity 方案不同,BitzOrcas 使用与 SqlSugar 集成的轻量级自定义身份系统。

权限模型

PlatformTenant
RoleType (Admin, Operator, EndUser 等)
SysRole
SysRoleModulePermission (Role + Module + Permission → CRUD 矩阵)
SysModule → SysPermission

核心实体

实体用途
PlatformTenantEntityplatform_tenant租户注册(名称、状态、配置)
SysRoleEntitysys_role每租户的角色定义
SysRoleTypeEntitysys_role_type角色类型目录(Admin、Operator 等)
SysModuleEntitysys_module权限模块目录
SysPermissionEntitysys_permission单个权限定义
SysRoleModulePermissionEntitysys_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_idtenant_idroles claims
HMAC应用调用方带有 TenantIdclient_id
API Key应用调用方带有 TenantIdScopesclient_id

当前用户

ICurrentUser 接口在整个应用中提供身份信息:

// 由 HttpContextCurrentUser 从 JWT claims 填充
UserIdGuid
TenantIdstring
UserNamestring
RolesIEnumerable<string>

委托(模拟登录)

BitzOrcas 通过Delegation 子系统支持操作员模拟:

  • DelegationTokenService — 生成模拟令牌
  • DelegationGrantEntity — 存储授权记录
  • DelegationTokenMiddleware — 在请求管道中验证委托令牌
  • 授权具有可配置的 TTL 和范围限制

数据范围解析器

public interface IDataScopeResolver
{
DataScope Resolve(ICurrentUser user, string resourceTenantId);
}
public enum DataScope
{
Own, // 仅自己的数据
Tenant, // 租户内所有数据
CrossTenant // 跨租户(管理员/超级用户)
}

另见