在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)
Posted
技术标签:
【中文标题】在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)【英文标题】:Creating new Role (by code) during the Tenant creation process from UI (ABP.IO) 【发布时间】:2021-03-20 14:01:48 【问题描述】:我正在尝试在 ABP.IO 框架版本 4 上从 UI 创建新租户时添加角色的创建。
从 ABP.IO 文档中,我发现通过使用现有的 SaasDataSeedContributor 类,我可以在创建新租户时“播种”一些数据。
我的问题是,在这个类中,我没有使用 IIdentityRoleAppService.CreateAsync 方法的权限(未授予给定策略)。 因此,我尝试通过 AppService 并使用 IdentityRoleManager 甚至 IIdentityRoleRepository,但由于其保护级别,构造函数无法访问,因此无法创建 IdentityRole 对象。
有没有想过?在使用 SaasDataSeedContributor 创建租户 appart 时,是否还有其他方法可以执行操作。或者我在这里做错了什么。
感谢您的帮助
【问题讨论】:
我实际上找到了不受保护的构造函数:IdentityRole(Guid Id, string Name, [Guid?tenantId = null]),所以我直接在 SaasDataSeedContributor 类上使用 IdentityRoleManager,现在一切正常。 请不要在其他服务中使用ApplicationServices
。
是的,谢谢,我实际上在 SaasDataSeedContributor 中使用 IdentityRoleManager,它是一个类而不是服务。
【参考方案1】:
试试这个。
public class AppRolesDataSeedContributor : IDataSeedContributor, ITransientDependency
private readonly IGuidGenerator _guidGenerator;
private readonly IdentityRoleManager _identityRoleManager;
public AppRolesDataSeedContributor(IGuidGenerator guidGenerator, IdentityRoleManager identityRoleManager)
_guidGenerator = guidGenerator;
_identityRoleManager = identityRoleManager;
public async Task SeedAsync(DataSeedContext context)
if (context.TenantId.HasValue)
// try this for a single known role
var role = await _identityRoleManager.FindByNameAsync("new_role");
if (role == null)
var identityResult = await _identityRoleManager.CreateAsync(
new IdentityRole(_guidGenerator.Create(), "new_role", context.TenantId.Value));
// or this (not tested) for multiple roles
/*
var newRoles = new[] "role1", "role2" ;
var identityRoles = from r
in _identityRoleManager.Roles
where r.TenantId == context.TenantId.Value
select r.Name;
var except = newRoles.Except(identityRoles.ToList());
foreach (var name in except)
var identityResult = await _identityRoleManager.CreateAsync(
new IdentityRole(_guidGenerator.Create(), name, context.TenantId.Value));
*/
【讨论】:
以上是关于在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)的主要内容,如果未能解决你的问题,请参考以下文章
我如何将带有数据的模型从数据库传递到 ABP.IO 布局挂钩?
AWS-CLI:在从快照创建的现有集群中创建 RDS Aurora 数据库实例