0

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

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

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

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

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

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

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

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

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

ответ

0

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

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

Что ActionFilter делает на основе роли пользователя, запрашивающего страницу будет либо перенаправить их на маршрут и действия установить Route = «Счет», действие = «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, которые могут помочь. Есть много примеров надежды, которая поможет вам.