ASP.NET разрешения рамок? - PullRequest
       22

ASP.NET разрешения рамок?

2 голосов
/ 27 сентября 2011

Проблема

В 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
)

Используя приведенный выше пример ссылки, мы получили бы что-то вроде: "teacher", "labelName", "asp: label", "click", 1, 0, 0, 0(может прочитать ссылку, но не «выполнить» щелчок)

План состоит в том, чтобы иметь возможность сделать несколько вещей:

  1. Использование разрешений для объединения нескольких aspx илогика на одной странице (aspx).Чтобы каждый раз сокращать объем обслуживания, требуется новая роль.
  2. Управление на всех уровнях (вкладка -> управление) ролями разрешений «группы».Например, используйте эту таблицу для контроля видимости элементов управления на каждом уровне (вкладка, страница, элемент управления).А также отдельные функции (например, щелкните элемент управления ссылкой)
  3. Управляет тем, какие данные возвращаются в пользовательский интерфейс и какие операции CRUD разрешены.

Существуют ли рамкитам для ASP.NET, который уже может это сделать? Я почти уверен, что Content Management Systems (CMS) может сделать это, но это приложение не будет использовать CMS :).Я действительно хочу не изобретать велосипед.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Посмотрите на AzMan .У меня такое ощущение, что это то, что вы ищете.

С AzMan вы определяете операции и проверяете, авторизован ли пользователь для выполнения операции в коде.Затем вы можете определить, какие роли разрешено выполнять, какие операции и назначать роли пользователям - поскольку вы проверяете операции, а не роли, никаких изменений кода не потребуется, если вы хотите ввести новую роль или переназначить операции между ролями.

1 голос
/ 29 сентября 2011

Решили попробовать NetSqlAzMan , потому что:

  • Не COM и IS .NET 4
  • СУБД для хранилища данных
  • AOP (Аспектно-ориентированное программирование) (Может использовать атрибуты вместо массивных проверок if / else)
  • Слабосвязанная
  • Обрабатывает сценарии разрешений для ролей
  • Free
0 голосов
/ 27 сентября 2011

По правде говоря, членство в ASP.net контролирует должно иметь возможность делать то, что вы хотите.Настройка базы данных с соответствующей схемой позволяет вам использовать огромный набор методов и объектов для управления доступом пользователей.Как упоминает Луис, вы можете получить доступ к управляющим страницам и папкам для определенных ролей, но если вы хотите заблокировать отдельные функции в зависимости от роли пользователя, вы можете использовать метод IsUserInRole().

Нет смысла изобретать велосипед, если вы можете использовать встроенный, хорошо проверенный процесс.

...