Как создать разные View в зависимости от роли авторизованного пользователя в ASP.NET MVC? - PullRequest
1 голос
/ 30 октября 2009

Я новичок в ASP.NET MVC , поэтому вам нужна ваша помощь, чтобы решить мою проблему:

В моем приложении вход в систему будет осуществляться с использованием роли пользователя. У меня есть собственная схема базы данных (например, User, Role, UserInRole и т. Д.), И я использую свои пользовательские MembershipProvider и RoleProvider для входа в систему.

Кстати, я использую контроллер учетной записи MVC по умолчанию с некоторыми изменениями. Сейчас я пытаюсь добиться того, чтобы в зависимости от роли вошедшего в систему пользователя я хотел создать другое представление для пользователя.

Можно ли каким-либо образом использовать параметр returnUrl метода действия LogOn? (Этот параметр по умолчанию имеет значение null). Если да, как я могу создать и отправить returnUrl в зависимости от роли? Или есть более простой способ добиться этого?

Ответы [ 3 ]

1 голос
/ 30 октября 2009

По умолчанию, в ваших методах контроллера, которые возвращают ActionResult, если вы просто возвращаете «View ()», то страница, которая будет отображаться, будет страницей в вашем каталоге Views с именем вашего метода контроллера. Однако вы можете указать имя представления, которое будет возвращено, или передать вызов другому методу контроллера для возврата соответствующего представления.

Как в следующем надуманном примере:

    public ActionResult Edit(string id)
    {
    // get the object we want to edit
        IObjectDefinition definedObject = _objectManager.GetObjectById(id);
        if (definedObject  != null)
        {
            ViewData.Add("definition", definedObject );// add to view data collection so can display on page

            IUser user = GetCurrentUser();// get from session/cookie/whatever
            if (!user.IsAccountAdmin)
    {   
                return View("Detail");// a readonly page as has no rights to edit
    }
    else
    {
        return View();// same object displayed in editable mode in another view
    }
        }
        else
        {
            return New();// call to controller method below to allow user to create new record
        }
    }


    public ActionResult New()
    {
        return View();
    } 
0 голосов
/ 30 октября 2009

Я думаю, что вы можете выполнить RedirectToAction при успешном входе в систему, и, поскольку у вас теперь есть действительный пользователь входа в систему, в методе действия вы можете использовать свойство IsInRole пользователя LoggedIn и отобразить соответствующее частичное представление.

0 голосов
/ 30 октября 2009

Вы сами решаете, какое представление использовать (визуализировать) в действии - оно не продиктовано непосредственно URL-адресом

В коде у вас есть доступ к объекту пользователя, и по нему можно определить роли, в которых находится пользователь, - из-за этого должно быть достаточно просто выбрать соответствующий вид.

...