ASP.NET Custom Role поставщик: роль в зависимости от контекста? - PullRequest
0 голосов
/ 18 января 2012

Я начинаю новый проект, и у меня есть вопрос о Провайдере пользовательских ролей с ASP.Net MVC 3.

Мне нужно проверить роль для нескольких действий моего конструктора, поэтому я сказал, что все в порядке, я могу использовать поставщика ролей.

Проблема в том, что роль зависит от текущего "контекста":

Фактически пользователи в моей базе данных связаны с несколькими «сущностями» и имеют роль «A» для сущности X и роль B для сущности Y. Все данные, которые будут отображаться / редактироваться, являются «дочерними» этого лица

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

Текущий «объект» будет сохранен в сеансе.

Цель состоит в том, чтобы не допустить несанкционированного меню / действия для объекта X только потому, что это право было разрешено для пользователя Y.

Проблема в том, что в поставщике ролей у меня нет способа получить какой-либо контекст, я получаю только имя пользователя.

Итак, что, по вашему мнению, я мог бы сделать? (Если это может помочь, членство также является индивидуальным поставщиком членства).

1 Ответ

0 голосов
/ 18 января 2012

Чтобы заблокировать доступ к этим конкретным страницам, вы можете реализовать RoleManagementFilter для своих действий. Это позволит только пользователям в роли сотрудника, роли администратора получать доступ к определенным страницам.

[RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)]
Public ActionResult EmployeeSettings(){
    return View();
}

То, что делает ActionFilter, зависит от роли пользователя, запрашивающего страницу, либо перенаправит их на маршрут и действие, которые вы установили Route = "Account", Action = "LogOn", либо разрешите их.

Ниже приведена часть атрибута ActionFilterAttribute.

public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string[] roles = Roles.GetRolesForUser();
        string userrole = "";

        if (roles.Length > 0)
            userrole = roles[0];

        if (Regex.IsMatch(userrole, Role))
            filterContext.HttpContext.Response.Redirect(redirectUrl(), true);
    }

Я не знаю, какие у вас могут быть сущности, и если это выполнимо или нет, но если бы вы создавали роли для каждой сущности, присоединяйте пользователей к тем ролям, которые вы могли бы затем ограничить действиями, если пользователь в Roles.GetRolesForUser ();

Я нашел фильтры действий в статье MSDN http://msdn.microsoft.com/en-us/magazine/gg232768.aspx, которые могут помочь. Есть множество примеров, которые, надеюсь, помогут вам.

...