Проблема
В ASP.NET нет концепции связывания разрешений с ролями.
Мое приложение
Текущее веб-приложение использует настраиваемое членство пользователей и поставщиков ролей. В приложении есть 4 роли: суперпользователь, администратор, директор и учитель. Когда пользователь входит в систему, он перенаправляется в соответствующий пользовательский интерфейс. Например, администраторы перенаправляются в интерфейс администратора, учителя перенаправляются в интерфейс учителя. У каждого интерфейса есть собственная главная страница и страницы aspx. Новое требование заключается в том, что учителям больше не разрешается просматривать определенную информацию или выполнять определенные функции. Информация может быть полем или строкой в элементе управления gridview, она также может быть функциональной (например, не может щелкнуть ссылку, чтобы открыть всплывающее окно, но по-прежнему видеть текст ссылки). Для других ролей также требуются особые «разрешительные» требования, но они полностью отличаются от требований учителей.
Предлагаемое решение
Создайте таблицу базы данных для централизованного сопоставления permissionsToRoles следующим образом:
CREATE TABLE [dbo].[PermissionToRole](
[PermissionID] [int] IDENTITY(1,1) NOT NULL primary key,
[Role] int NOT NULL,
[Control] [varchar](50) NOT NULL,
[ControlType] [varchar](50) NOT NULL,
[Function] [varchar](50) NOT NULL,
[Read] [bit] NULL,
[Write] [bit] NULL,
[Execute] [bit] NULL,
[Delete] [bit] NULL
)
Используя приведенный выше пример ссылки, мы получим что-то вроде: «учитель», «labelName», «asp: label», «click», 1, 0, 0, 0 (можно прочитать ссылку, но не «выполнить» щелчок)
План состоит в том, чтобы уметь делать несколько вещей:
- Используйте разрешения для объединения нескольких aspx и логики на одной странице (aspx). Чтобы сократить обслуживание каждый раз, когда требуется новая роль.
- Управление на всех уровнях (вкладка -> управление) с разрешениями ролей или групп. Например. используйте эту таблицу для управления видимостью элементов управления на каждом уровне (вкладка, страница, элемент управления). А также индивидуальные функции (например, нажатие на ссылку)
- Управляйте тем, какие данные возвращаются в пользовательский интерфейс и какие операции CRUD разрешены.
Существуют ли платформы для ASP.NET, которые уже могут это сделать? Я почти уверен, что системы управления контентом (CMS) могут это сделать, но это приложение не будет использовать CMS :). Я действительно хочу не изобретать велосипед заново.
Спасибо!