2013-09-24 3 views
1

В настоящее время я разрабатываю приложение ASP.NET MVC4, которое имеет 3 роли: admin, manager и editor. Редакторы могут использовать статьи CRUD в системе, но редакторы могут читать, обновлять или удалять свои СОБСТВЕННЫЕ статьи. Я видел, что я могу контролировать доступ к контроллеру и действию, добавив:Авторизация ASP.NET MVC4 в зависимости от роли и информации

[Authorize(Roles="editor")] 

но только ограничивает роль не информации.

Если редактор A создал статью 1 ТОЛЬКО, редактор A имеет доступ к этой статье. Ни одна другая роль не имеет доступа к контроллеру или информации. Какова была бы лучшая практика для ограничения доступа по ролям и по контексту?

ответ

1

Вы могли бы реализовать это в ядре вашей системы, например, при наличии поля в хранилище данных, идентификации создателя и пользователей с разрешения.

Тогда вы можете реализовать свой собственный атрибут authorize like;

общественного класса CustomAuthenticateAttribute: AuthorizeAttribute {

protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    // your own business logic, for instance, check if the user is the 
    // creator of the requested resource (check a database field you 
    // have created to identify the creator etc...) 
    // if that goes well authorize using regular roles, below 

    return base.AuthorizeCore(httpContext); 
} 

}

Вы бы затем украсить ваш контроллер с

[AuthorizeAttribute(Role = "editors")] 
3

Невозможно создать пользовательский AuthorizeAttribute, чтобы проверить, разрешено ли пользователю обновлять определенную статью.

Вместо этого вы хотите проверить эту логику в контроллере (или бизнес-логике). Вы можете видеть этот подход во многих проектах с открытым исходным кодом.

[HttpPost] 
[Authorize(Roles="editor")]  
[ValidateAntiForgeryToken] 
public ActionResult Update(ArticleModel model) 
{ 
    if(IsUserAllowedToUpdate(userId, model.ArticleId)) 
    { 
     // Update article 
    } 
    return View(model); 
} 
Смежные вопросы