Архитектура приложений — регистрация и управление администратором

Не знаю, уместный ли это вопрос. Однако вот оно.

В настоящее время я работаю над проектом для клиента, бритвой ASP.net 4.5 MVC4. По сути, это интернет-магазин для их клиентов, которые регистрируют учетную запись и заказывают товары из своих каталогов для использования на мероприятиях, которые они устраивают. Клиенты должны зарегистрироваться на события, созданные сотрудниками моих клиентов, чтобы размещать заказы. На сайте есть портал администратора, где они будут входить в систему и создавать, управлять и обновлять события, заказы и пользователей. Как это сделать - не мой вопрос. Мой вопрос:

Как, черт возьми, я должен зарегистрировать администраторов?! Какой процесс вы, ребята, использовали? Я не думаю, что жестко закодированный пароль — это хорошо, и я определенно хочу отделить его от обычной регистрации пользователя. Я планирую использовать SimpleMembership. Я имею в виду, что существующий администратор может создавать учетные записи администратора, но как насчет первой учетной записи администратора. Курица или яйцо? Имеет ли это смысл?

РЕДАКТИРОВАТЬ: я проделал изрядную домашнюю работу по этому вопросу, я имею в виду, я полагаю, что мог бы вручную добавить роль администратора в webpages_Roles и вручную добавить ее первому администратору, а последующие администраторы добавили эту роль администратором, но первые пару шагов звучат немного хакерский.


person bigjfunk    schedule 11.08.2013    source источник


Ответы (1)


Как вы сказали в части EDIT, вы должны сначала добавить учетную запись администратора вручную. После этого вы можете просто предоставить роль Admin любому зарегистрированному пользователю следующим образом:

Roles.AddUserToRole(model.UserName, "Admin");  

Если вы хотите, чтобы ваши админы были полностью отделены от других пользователей, вы должны поставить роль user обычным пользователям, и не позволять админам иметь эту роль.

Итак, просто добавьте приведенный выше код в Register метод действия AccountController.cs.

    [HttpPost]
    [Authorize(Roles="A, Personnels")]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                Roles.AddUserToRole(model.UserName, "User"); // Add this line here...
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

И возьмите на себя ответственность за создание учетных записей администратора самостоятельно или позвольте им зарегистрироваться как обычным пользователям и сделать следующее [рекомендуется первый подход]:

Roles.RemoveUserFromRole(model.UserName, "User");
Roles.AddUserToRole(model.UserName, "Admin");

Это было...

person Amin Saqi    schedule 11.08.2013
comment
Спасибо за исчерпывающий ответ. Поразмыслив некоторое время, я понял, что на самом деле нет способа вручную добавить первого пользователя, который был бы эффективным и не привел к уязвимости. - person bigjfunk; 11.08.2013