2012-10-11 2 views
0

Чтобы этот пример был прост, на моем сайте есть два контроллера, UserController & VenuesController, оба из которых имеют свое собственное «разрешение администратора».MVC 3 Action/Controller Attributes/Permissions

Таким образом, пользователь может иметь «Пользователь» разрешения администратора и/или «Venues» разрешение администратора (это BOOL поле на таблице пользователей в моем дб)

Пользователь входит в системе, и я его/ее разрешения в сеансе.

Я хочу украсить мои контроллеры специальным атрибутом, чтобы проверить, имеет ли пользователь правильное разрешение на использование контроллера. Я не хочу создавать UserPermissionAttribute и VenuePermissionAttribute, в идеале я хочу один атрибут, который принимает свойство bool и проверяет, что это правда, поэтому что-то вроде;

[CheckPermissionAttribute(_userSession.AdminPermissions.Users)] 
public class UsersController : Controller 
{ 

} 

и

[CheckPermissionAttribute(_userSession.AdminPermissions.Venues)] 
public class VenuesController : Controller 
{ 

} 

Это можно достичь, или я должен смотреть на PostSharp или что-то еще, чтобы достичь тех же результатов?

+2

Почему бы вам не просто использовать встроенные функции управления ролями? Вы просто назначаете роль VenuesAdmin и UsersAdmin пользователям, которым вы хотите иметь эти разрешения, а затем добавьте проверку, используя стандартный атрибут Authorize? –

+0

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

+0

Откуда вы знаете, кто такой пользователь? –

ответ

0

вы можете создать атрибут с параметром. Параметры фильтра действий - это свойства фильтра действий.

но лучше создавать пользователей и роли пользователю стандартный подход с AuthorizeAttribute

+0

Приложение не использует членство в ASP.NET, у меня есть таблица пользовательских пользователей, где я храню все разрешения, которые у каждого пользователя есть. В приложении у меня есть разрешения в сеансе. Я хочу иметь атрибут на контроллере, где я могу передать определенное значение из сеанса, то есть, если это пользовательский контроллер, то я хочу передать сессию [HasUsersPermission], которая является полем bool (так или true для false). В моем атрибуте я хочу проверить, верно ли переданное значение, если да, то у них есть доступ. Это означает, что на контроллере мест, где я проходил сессию [HasVenuePermission] – lordy1981

+0

, я понимаю, что параметры атрибута должны быть постоянными, поэтому я ищу что-то еще, что поможет мне достичь этого! – lordy1981

Смежные вопросы