将角色映射到静态值
本文关键字:静态 色映射 角色 | 更新日期: 2023-09-27 18:04:13
继续我之前的问题,公认的答案是完美的。
然而,我只想在我的数据库中有几个角色,说:
Id | Role
---------------
1 | AccountOwner
2 | AccountAdmin
3 | AccountUser
问题中可接受的答案在每次用户注册帐户时都会在Roles中创建一个新行。是否有任何方法可以请求Identity系统使用数据库中存在的角色?考虑以下代码:
public static async Task<bool> AddAccountAsync(this MyContext context, MyModel model)
{
try
{
Role role = new Role(TrackerRole.Owner);
Account account = new Account(model.AccountCurrency, model.AccountName, model.Description);
UserAccount uc = new UserAccount
{
User = model.User,
Account = account,
Role = role
};
account.UserAccounts.Add(uc);
context.Accounts.Add(account);
await context.SaveChangesAsync();
model.User.UserAccounts.Add(uc);
return true;
}
catch (DbUpdateException ex)
{
// LOG
}
return false;
}
如果可能的话,我想完全删除Role类并用Enum代替它。
如果要将其替换为enum,则不再需要角色实体,数据库中的role表也是如此。只是有角色属性类型的角色(enum),它将持续作为一个int到db。然而,如果您需要更新代码来为将来添加其他角色,这将导致设计缺陷。
关于只拥有三个角色并且每次不添加不必要的角色:从db (var role = Context.Roles.Where(...).FirstOrDefault()
)中获取正确的角色,并将其放入用户帐户的role属性中。这样,您就可以确保所有的uac都指向角色的正确实例。