У меня есть веб-сайт ASP.net с MS SQL Server на сервере.ASP.net Ограничить пользовательские функции на основе пользовательских ролей и разрешений таблиц, а не членов ASP
Для простоты я опишу свою проблему с тремя четырьмя таблицами, хотя на самом деле это намного больше.
ТАБЛИЦЫ:
tblSYSTEMS
• SYSTEMID (PK)
• SystemDescription
• Другие колонны
tblSYSTEMS_Projects (многие проекты могут быть связаны с каждой системой)
• Различные поля, которые пользователи могут см./изменить/удалить на основе разрешений.
ПОЛЬЗОВАТЕЛЕЙ (как генерируется ASP.net, для пользователей/членства/ролей и т.д ...)
• USERID
• Другие колонки
tblSYSTEMS_PERMISSIONS_LINK (это связывает две таблицы)
• SystemID
• Идентификатор_пользователя
• AllowEdit
• AllowView • AllowDelete
• AllowInsert
Я создал хранимую процедуру для каждой функции INSERT/UPDATE/DELETE в базе данных для tblSYSTEMS_Projects.
Когда пользователь переходит к изменению/добавлению/удалению записи в tblSYSTEMS_Projects, я отправляю параметр @userid (от текущего пользователя) в SP.
Для ОБНОВЛЕНИЯ Я проверяю, что в tblSYSTEMS_PERMISSIONS_LINK у них AllowEdit установлен как истинный, для данной SYSTEM в tblSYSTEMS. Способ привязки таблиц, если у них нет прав EDIT, не будет обновляться строка (потому что предложение WHERE по существу возвращает 0 строк), и я возвращаюсь к выполнению SP. Хорошо.
То же самое касается DELETE.
Но для INSERT нет никаких предложений WHERE для записей INSERTING в tblSYSTEMS_Projects.
- Как я могу предотвратить идентификатор пользователя, у которого нет вложений INSERT для конкретной системы, из вставки в таблицу tblSYSTEMS_Projects?
- Когда текущий вход в систему userid пытается щелкнуть по INSERT, что я могу сделать, чтобы перенаправить их на страницу «у вас нет epermission»?
- Могу ли я просто скрыть команду INSERT на основе текущего входа в систему? Когда я это сделаю? Нагрузка на страницу? Любые предложения по методологии для этого? Простой SP, который возвращает скаляр значения INSERT?
Я смотрел роли/членство и т. Д. ... но это не совсем работает, так как многие разные люди имеют разные разрешения на основе системы. В одной системе один человек может быть ADMIN и другой системой - быть только зрителем.
То, что я пытаюсь сделать, состоит в том, чтобы пользователи имели доступ к своим записям, но предоставляли им разрешение делать то, что им разрешено делать. Но эти разрешения различаются в зависимости от SystemID.
Думаю, я вижу, что вы делаете. Также должно быть поле внутри UsersInRoles, которое является частью первичного ключа, который связывает систему. Как я уже сказал, пользователь может иметь права на редактирование в системе A, но только просмотр в системе B. Таким образом, роль зависит от пользователя/системы. Мне нравится идея добавления таблицы ролей. – RadioActiveEd
Если вы используете ** поставщика DefaultRole **, вы не можете добавить дополнительные столбцы в ** таблицу UsersInRoles **. другими словами, если вы добавите столбец в ** UsersInRoles **, вам нужно будет создать ** Поставщик пользовательских ролей **. – Win
На данный момент я использую только таблицы ASP.net для управления входами. Мне все равно, что ASP.net управляет пользователями, а не обязательно роли. Я использую это только для получения идентификатора пользователя текущего пользователя. – RadioActiveEd