权限管理模块
本模块通过实现 IPermissionStore 接口,将权限值存储并管理在数据库中。
本文档仅介绍将权限值持久化到数据库的权限管理模块。如需了解授权与权限系统的工作原理,请参阅 授权文档。
安装方法
此模块已预装为 NuGet/NPM 包。您可继续以包形式使用并轻松获取更新,也可将其源代码集成至您的解决方案(使用 get-source CLI 命令)以开发自定义模块。
获取源代码
该模块的源代码可在此处访问:源码仓库。源代码基于 MIT 协议授权,可自由使用与定制。
用户界面
权限管理对话框
权限管理模块提供了可复用的对话框,用于管理对象关联的权限。例如,身份认证模块 使用此对话框管理用户与角色的权限。下图展示了身份认证模块的角色管理页面:
点击角色对应的 操作 -> 权限 时,将打开权限管理对话框。该对话框的示意截图如下:
在此对话框中,可为选定角色授予权限。左侧标签页代表主权限分组,右侧区域显示选定分组内定义的权限项。
IPermissionManager 服务
IPermissionManager 是本模块提供的核心服务,用于读取和修改权限值。该服务通常被 权限管理对话框 调用,您也可在需要设置权限值时直接注入使用。
若仅需读取/检查当前用户的权限值,请使用
IAuthorizationService或[Authorize]特性,具体方法参见 授权文档。
示例:通过 IPermissionManager 服务为用户和角色授予权限
public class MyService : ITransientDependency
{
private readonly IPermissionManager _permissionManager;
public MyService(IPermissionManager permissionManager)
{
_permissionManager = permissionManager;
}
public async Task GrantRolePermissionDemoAsync(
string roleName, string permission)
{
await _permissionManager
.SetForRoleAsync(roleName, permission, true);
}
public async Task GrantUserPermissionDemoAsync(
Guid userId, string roleName, string permission)
{
await _permissionManager
.SetForUserAsync(userId, permission, true);
}
}
权限管理提供程序
权限管理模块与 权限系统 一样支持扩展。您可以通过定义权限管理提供程序来扩展其功能。
身份认证模块 内置了以下提供程序:
UserPermissionManagementProvider:管理基于用户的权限RolePermissionManagementProvider:管理基于角色的权限
IPermissionManager 在获取/设置权限时会调用这些提供程序。您可以通过实现 IPermissionManagementProvider 接口或继承 PermissionManagementProvider 基类来创建自定义提供程序。
示例:
public class CustomPermissionManagementProvider : PermissionManagementProvider
{
public override string Name => "Custom";
public CustomPermissionManagementProvider(
IPermissionGrantRepository permissionGrantRepository,
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant)
: base(
permissionGrantRepository,
guidGenerator,
currentTenant)
{
}
}
PermissionManagementProvider 基类已提供默认实现(基于 IPermissionGrantRepository)。您可根据需求重写基类方法。每个提供程序必须具有唯一名称(示例中为 Custom,建议使用简短名称,因为它会随每条权限记录保存至数据库)。
创建提供程序类后,需通过 PermissionManagementOptions 配置类 进行注册:
Configure<PermissionManagementOptions>(options =>
{
options.ManagementProviders.Add<CustomPermissionManagementProvider>();
});
提供程序的顺序至关重要。系统会按逆序执行提供程序,这意味着此示例中 CustomPermissionManagementProvider 将首先执行。您可将自定义提供程序插入 Providers 列表的任意位置。
抠丁客




