在ASP.NET Identity中创建角色组织单位结构可以通过以下步骤实现:
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
// 添加其他角色属性
}
public class OrganizationUnit
{
public int Id { get; set; }
public string Name { get; set; }
// 添加其他组织单位属性
}
public class RoleOrganizationUnit
{
public int RoleId { get; set; }
public Role Role { get; set; }
public int OrganizationUnitId { get; set; }
public OrganizationUnit OrganizationUnit { get; set; }
}
public class ApplicationDbContext : IdentityDbContext
{
public DbSet Roles { get; set; }
public DbSet OrganizationUnits { get; set; }
public DbSet RoleOrganizationUnits { get; set; }
// 添加其他DbSet
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// 配置角色-组织单位关联表的复合主键
modelBuilder.Entity()
.HasKey(r => new { r.RoleId, r.OrganizationUnitId });
// 配置角色-组织单位关联表的外键关系
modelBuilder.Entity()
.HasRequired(r => r.Role)
.WithMany()
.HasForeignKey(r => r.RoleId);
modelBuilder.Entity()
.HasRequired(r => r.OrganizationUnit)
.WithMany()
.HasForeignKey(r => r.OrganizationUnitId);
}
}
public class ApplicationUserManager : UserManager
{
// 添加构造函数
public async Task AddToOrganizationUnitAsync(string userId, int organizationUnitId)
{
var user = await FindByIdAsync(userId);
if (user == null)
{
return IdentityResult.Failed("User not found.");
}
user.OrganizationUnitId = organizationUnitId;
var result = await UpdateAsync(user);
return result;
}
public async Task AddToRoleAndOrganizationUnitAsync(string userId, int roleId, int organizationUnitId)
{
var user = await FindByIdAsync(userId);
if (user == null)
{
return IdentityResult.Failed("User not found.");
}
user.RoleId = roleId;
user.OrganizationUnitId = organizationUnitId;
var result = await UpdateAsync(user);
return result;
}
}
public class UserController : Controller
{
private ApplicationUserManager _userManager;
public UserController(ApplicationUserManager userManager)
{
_userManager = userManager;
}
public async Task AddToOrganizationUnit(string userId, int organizationUnitId)
{
var result = await _userManager.AddToOrganizationUnitAsync(userId, organizationUnitId);
if (result.Succeeded)
{
// 添加成功的处理逻辑
}
else
{
// 添加失败的处理逻辑
}
return RedirectToAction("Index", "Home");
}
public async Task AddToRoleAndOrganizationUnit(string userId, int roleId, int organizationUnitId)
{
var result = await _userManager.AddToRoleAndOrganizationUnitAsync(userId, roleId, organizationUnitId);
if (result.Succeeded)
{
// 添加成功的处理逻辑
}
else
{
// 添加失败的处理逻辑
}
return RedirectToAction("Index", "Home");
}
}
以上是一种基本的实现方法,可以根据实际需求进行调整和扩展。