将角色映射到静态值

本文关键字:静态 色映射 角色 | 更新日期: 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都指向角色的正确实例。