2014-02-26 5 views
0

Я пытаюсь создать фильтры на ASP.NET MVC 4 на основе IAuthorizationFilter, чтобы ограничить доступ к определенным контроллерам.Реализация IAutorizationFilter в ASP.NET MVC 4

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

Итак, я пытаюсь в финале получить свои привилегии BOOL на основе User.Identity.Name, а затем проверить, имеет ли он право или нет.

Нужно ли мне внедрять фильтры столько, сколько у меня есть BOOL privilges или только один фильтр может выполнять работу? Как это реализовать? Любая блестящая идея, пожалуйста?

ответ

0

Нет, вам не обязательно это делать. Как вы определяете привилегии каждого пользователя, можно либо сделать в пределах OnAuthorization, либо реорганизоваться в отдельный статический метод и вызвать в пределах OnAuthorization.

Но, когда вы используете использовать пользовательский атрибут авторизовать для любых Action метода или для Controller, вы должны быть в состоянии сказать, что только пользователи с Create разрешения доступа пользователей Action или с Read разрешения может получить доступ к этим controller. Пожалуйста, взгляните на это сообщение в блоге.

http://codeutil.wordpress.com/2013/05/14/forms-authentication-in-asp-net-mvc-4/#mvc-implement-custom-authorization-filter

вы заметите, что есть две переменные, определенные

public int StartTime { get; set; } 
public int EndTime { get; set; } 

вместо этого, вы можете использовать

public bool AllowRead {get;set;} 
public bool AllowWrite {get;set;} 

затем использовать атрибут авторизовать следующим

[HttpPost] 
[CustomAuthorize(AllowRead = false, AllowWrite = true)] 
public ActionResult Create(Model model) 
{ 
    //your code 
} 

выше всего лишь один из способов сделать это. Другой метод - использовать флаг enum. Пожалуйста, взгляните на этот ответ.

How could I use my own database table for MVC 4 user control (and authorizing with boolean fields in role table)?

+0

Благодарим за отзыв. Эти привилегии хранятся в таблице (классе), которая связана с таблицей членства. Итак, я пытаюсь получить привилегии текущего зарегистрированного пользователя и проверить, имеет ли он право на выполнение действия контроллера. Привилегия позволяет использовать все методы контроллера. – ABCmo