невозможно добавить роли в личность asp.net - PullRequest
0 голосов
/ 05 мая 2018

Я использовал следующий код для добавления ролей пользователя.

    Roles.AddUserToRole(model.Email, "COMPANYVIP");

и тогда я получил эту ошибку:

    The Role Manager feature has not been enabled

после некоторого исследования я обнаружил, что мы должны добавить следующую строку подключения в web.config

    <configuration>
      <system.web>
        <roleManager enabled="true" />
      </system.web>
    </configuration>

добавление этого исключило мою первую ошибку, но теперь я получаю эту ошибку:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server

что мне теперь делать?

1 Ответ

0 голосов
/ 05 мая 2018

Удалите ваши изменения в web.config и в Startup.Auth добавьте следующую ссылку к ConfigureAuth:

public void ConfigureAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(ApplicationDbContext.Create);
    // Add this reference to RoleManager (without changing any other items)
    // Make sure it is added below ApplicationDbContext.Create
    app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
}

Затем в вашем контроллере убедитесь, что он включает это в конструктор:

public class YourController : Controller
{
    // Add this
    private ApplicationRoleManager _roleManager;

    // Add roleManager
    public YourController(ApplicationRoleManager roleManager)
    {
        // Add this
        RoleManager = roleManager;
    }

    public ApplicationRoleManager RoleManager {
        get {
            return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
        }
        private set {
            _roleManager = value;
        }
    }
}

, а также включить это в распоряжение контроллера (если оно у вас есть):

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        // include this
        if (_roleManager != null)
        {
            _roleManager.Dispose();
            _roleManager = null;
        }
    }

    base.Dispose(disposing);
}

Вам также может понадобиться добавить этот код в IdentityConfig (в папке App_Start, если вы используете шаблон):

public class ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
    : base(roleStore)
    { }

    public static ApplicationRoleManager Create(
        IdentityFactoryOptions<ApplicationRoleManager> options,
        IOwinContext context)
    {
        var manager = new ApplicationRoleManager(
            new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));
        return manager;
    }
}

Теперь вы сможете использовать RoleManager в контроллере.

...