Galosys.Foundation.Authorization.EntityFrameworkCore
26.8.18.1
See the version list below for details.
dotnet add package Galosys.Foundation.Authorization.EntityFrameworkCore --version 26.8.18.1
NuGet\Install-Package Galosys.Foundation.Authorization.EntityFrameworkCore -Version 26.8.18.1
<PackageReference Include="Galosys.Foundation.Authorization.EntityFrameworkCore" Version="26.8.18.1" />
<PackageVersion Include="Galosys.Foundation.Authorization.EntityFrameworkCore" Version="26.8.18.1" />
<PackageReference Include="Galosys.Foundation.Authorization.EntityFrameworkCore" />
paket add Galosys.Foundation.Authorization.EntityFrameworkCore --version 26.8.18.1
#r "nuget: Galosys.Foundation.Authorization.EntityFrameworkCore, 26.8.18.1"
#:package Galosys.Foundation.Authorization.EntityFrameworkCore@26.8.18.1
#addin nuget:?package=Galosys.Foundation.Authorization.EntityFrameworkCore&version=26.8.18.1
#tool nuget:?package=Galosys.Foundation.Authorization.EntityFrameworkCore&version=26.8.18.1
Galosys.Foundation.Authorization.EntityFrameworkCore
基于 EF Core 的 ABAC/RBAC 策略存储包:为 Galosys.Foundation.Authorization 提供数据库版只读策略仓库,适配服务无既有 RBAC 表的应用(静态存储模式)。策略以 JSON 单列存储,评估路径全量读入内存。
设计文档:
docs/designs/abac-design.md(§4.2 静态存储模式、§6.6authz_*迁移表)。核心接口见Galosys.Foundation.Authorization。
表结构
| 实体 | 表 | 说明 |
|---|---|---|
AuthzPolicy |
authz_policy |
策略(雪花 Id、Name 唯一=权限码、Content 策略 JSON、Version 行级版本) |
AuthzPrincipalPolicy |
authz_principal_policy |
主体↔策略绑定(PrincipalType/PrincipalId/PolicyName) |
AuthzRoleAssignment |
authz_role_assignment |
用户↔角色(UserId/RoleName) |
AuthzRoleHierarchy |
authz_role_hierarchy |
角色继承(ParentRole/ChildRole/TenantId) |
AuthzResource |
authz_resource |
资源定义(Code=ARN 唯一) |
五实体均继承 FullEntity<long>(审计列 + 软删除);唯一索引经 IEntityTypeConfiguration<> 提供,DbContext<T> 自动发现——宿主自带上下文同样生效。
用法
本包不定义自己的 DbContext(对齐 Actuator/Outbox 惯例),宿主需自行注册
DbContext<T>上下文。
使用宿主自带的上下文
仓储与 DI 均为泛型(TContext : DbContext<TContext>),宿主把自有的 DbContext<T> 塞进来即可,[Table] 实体与配置类会被自动发现:
services.AddDbContext<MyContext>(options => ...);
services.AddAuthorizationEngineEfCore<MyContext>();
对齐
AddActuatorEFCore<TContext>/AddEfCoreOutboxStore<TDbContext>惯例:无自动装配模块,需宿主显式调用泛型扩展。
生命周期契约(自 captive-dependency 修复起)
AddAuthorizationEngineEfCore<TContext>() 内部按以下顺序注册,规避 Singleton 引擎对 Scoped DbContext 的 captive dependency:
RemoveAll<IAuthorizationPolicyRepository>();TryAddScoped<EfCoreAuthorizationPolicyRepository<TContext>>()(按具体类型注册,不挂在接口上);TryAddSingleton<ScopedAuthorizationPolicyRepository<TContext>>()(Singleton 适配器,每次方法调用经IServiceScopeFactory建 scope 解析 Scoped EF 仓储并转发,scope 结束释放DbContext);AddSingleton<IAuthorizationPolicyRepository>(sp => ...)工厂,按AuthorizationEngineOptions.EnablePolicyCache返回:true→PolicyCache(使用核心包新增的作用域解析构造函数,每次首载/轮询/重载创建独立 scope 解析底层仓储);false→ScopedAuthorizationPolicyRepository<TContext>(Singleton 适配器)。
DbContext<TContext> 仍由宿主按既有方式注册为 Scoped;本包不改变其注册语义。EnablePolicyCache 默认开启(对齐核心包 AuthorizationEngineOptions)。
在 validateScopes: true / validateOnBuild: true 下容器构建不再抛 Cannot consume scoped service ... from singleton ...:
// EnablePolicyCache=true(默认):引擎直接依赖 IAuthorizationPolicyRepository → PolicyCache(Singleton)
services.AddAuthorizationEngineEfCore<MyContext>();
// EnablePolicyCache=false:走 Singleton 适配器,按调用开 scope
services.Configure<AuthorizationEngineOptions>(o => o.EnablePolicyCache = false);
services.AddAuthorizationEngineEfCore<MyContext>();
历史:早期版本注册为
TryAddScoped<IAuthorizationPolicyRepository, EfCoreAuthorizationPolicyRepository<TContext>>(),导致 SingletonIAuthorizationEngine捕获 ScopedDbContext而触发 DI 校验失败,现已修复。
依赖
Galosys.Foundation.Authorization/Galosys.Foundation.EntityFrameworkCoreMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Relational
测试
测试项目使用内存 Sqlite(SqliteConnection("DataSource=:memory:") + EnsureCreated()),覆盖仓储全方法与角色继承/租户过滤。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Galosys.Foundation.Authorization (>= 26.8.18.1)
- Galosys.Foundation.EntityFrameworkCore (>= 26.8.18.1)
- microsoft.entityframeworkcore (>= 10.0.9)
- microsoft.entityframeworkcore.relational (>= 10.0.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 26.8.26.1 | 60 | 8/26/2026 |
| 26.8.23.1 | 83 | 8/23/2026 |
| 26.8.21.1 | 81 | 8/21/2026 |
| 26.8.20.1 | 82 | 8/20/2026 |
| 26.8.18.1 | 96 | 8/18/2026 |
| 26.8.17.1 | 98 | 8/17/2026 |
| 26.8.13.2 | 89 | 8/13/2026 |
| 26.8.13.1 | 91 | 8/13/2026 |
| 26.8.12.2 | 94 | 8/12/2026 |
| 26.8.12.1 | 96 | 8/12/2026 |
| 26.8.10.1 | 96 | 8/10/2026 |
| 26.8.5.1 | 96 | 8/5/2026 |
| 26.8.4.1 | 98 | 8/4/2026 |