Каков наилучший способ реализации различных представлений для веб-сайта в зависимости от роли? - PullRequest
4 голосов
/ 17 октября 2008

В ASP.NET какой лучший способ сделать следующее:

  1. Показать определенные элементы управления на основе ваших прав?
  2. Для элемента управления gridview, как вы показываете определенные столбцы в зависимости от вашей роли?

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

Ответы [ 2 ]

5 голосов
/ 17 октября 2008

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

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

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

Что касается элементов управления, то да ... Я бы просто установил свойство Visible для элемента управления на основе значения user.IsInRole ("licensename").

Для сеток я бы сделал то же самое ... установите для параметра Видимость столбцов логическое значение IsInRole.

//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact"); 

Я хотел бы создать ваши разрешения в очень гранулированной природе .. такой как

  • ViewAnyContact
  • ViewOwnContact
  • EditOwnContact
  • EditAnyContact
  • AddAnyContact
  • DeleteOwnContact
  • DeleteAnyContact
  • Etc ...
1 голос
/ 17 октября 2008

Если вы идете по пути на основе ролей, ASP.NET (начиная с версии 2.0) имеет множество доступных элементов управления членством, которые могут помочь в этом сценарии. Предполагая (и это может быть ошибочным предположением), что вы используете входящий в комплект провайдер членства, вы можете фактически использовать элемент управления LoginView для обработки # 1.

Способ работы состоит в том, что LoginView может использовать RoleGroups и связанные с ним ContentTemplates для настройки представления для пользователя в зависимости от роли. Это работает без проблем с провайдером членства в коробке; Я полагаю, что если вы создадите своего собственного поставщика услуг членства на основе технологии Microsoft, это также будет работать. (Я не сделал этот последний шаг.)

Возможно, вы могли бы использовать его для # 2, но это привело бы к дублированию кода и усилиям, что не является моим личным предпочтением. Я думаю, что ваш выбор использования специфичных для роли представлений SQL для управления этой таблицей может быть лучше, чем этот вариант. (Конечно, есть и другие варианты, которые могут быть лучше.)

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

РЕДАКТИРОВАТЬ: я прошу прощения; Я хотел включить ссылку для элемента управления LoginView. На DotNetJunkies есть учебник .

...