2009-10-14 3 views
1

Я создал приложение ASP.NET MVC и создал разные роли для своих пользователей. Затем я создал различные типы AuthorizeAttributes для разрешения/запрета доступа к различным Actions в моих элементах управления.Отключить ссылку, если пользователю не разрешен доступ к целевому

Однако у меня есть много ссылок, которые указывают на разные действия, которые ограничены для разных ролей. Можете ли вы как-то исправить, чтобы эти ссылки автоматически отключились? Я мог бы, конечно, добавить много UserIsInRole (....) - материал в моем коде, но я бы предпочел не делать этого, если есть лучший способ.

У вас есть предложения?

ответ

1

Являются ли они в списке или меню? Это что-то, что ваш контроллер может передать вашему представлению? вы можете удалить список всех разрешенных (или запрещенных, в зависимости от того, что более подходит) и проверить, что перед отображением ссылки.

если (allowedLink.Contans (MyLink)
// Показываем включена ссылка
еще
// показать инвалидов

Другой хороший способ будет переопределить HtmlHelper для ActionLinks и сделать это делать чек разрешений для вас. Тогда, если они не имеют права, ваш HTML помощник будет отображать его выключенным.

для примера, эта ссылка http://www.asp.net/learn/mvc/tutorial-09-cs.aspx

+0

О, второй совет, который вы мне дали, звучит как способ пойти за мной. Можете ли вы дать мне несколько подсказок? – Freddy

+0

Добавлена ​​ссылка на хороший учебник по этой теме. –

0

В верхней части моей головы ...

• Вы можете установить действие onClick для каждой ссылки, чтобы ничего не делать.

• Вы можете установить URL-адрес ссылки на "#", который ничего не делает.

+0

Он не спрашивает, как отключить, он спрашивает, как отключить на основе прав пользователя в режиме без взлома. –

+0

В этом случае я бы добавил атрибут к каждой ссылке, что-то вроде 'canDo =" xxx "', который указывает возможности, необходимые для работы этой ссылки, затем используйте Javascript для динамического включения/выключения ссылок на основе того, какие возможности у пользователя есть на самом деле. –

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