Каков рекомендуемый способ работы с разными ролями пользователей в приложении C #?

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

Я мог бы создать таблицу под названием «Пользователи» с именем пользователя и паролем и в соответствии с идентификатором типа пользователя показать форму или другую форму. Но меня больше интересует рекомендуемый подход опытных программистов.

Любой совет?

Изменить: я ищу что-то достаточно безопасное, но и достаточно расширяемое.


person Sergio Tapia    schedule 07.06.2010    source источник


Ответы (5)


Если это простое приложение, не переходите дорогу на космическом корабле.

Создайте следующую схему БД:

Пользователи: имя пользователя и хешированный пароль.

Роли: RoleName, RoleID, RoleStrength (int).

RolesMembership: таблица Rolemembership, которая содержит идентификатор пользователя и идентификатор роли, чтобы обеспечить возможность многократного членства в будущем.

При настройке ролей дайте им числовой вес. например: Admins = 1000, Power-users = 500, guest = 10. Таким образом, в ваших формах вы можете указать, что если уровень пользователя равен 500 или выше, установить полный просмотр, в противном случае - только просмотр или нет доступа.

Еще лучше абстрагироваться от этого с помощью класса безопасности с такими методами, как IsPowerUser или IsAdmin.

Он простой, читаемый и многоразовый.

person Bill Martin    schedule 07.06.2010

Даже если я не могу считать себя «опытным», я бы дал свой ответ, поскольку в эти недели сталкиваюсь с той же проблемой.

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

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

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

person Luca    schedule 07.06.2010

Я мог бы создать таблицу под названием «Пользователи» с именем пользователя и паролем и в соответствии с идентификатором типа пользователя показать форму или другую форму.

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

Я бы также разбил общие элементы управления на формы, чтобы вы могли повторно использовать общие части.

person kemiller2002    schedule 07.06.2010

Если вы используете Visual Studio, я бы просто использовал встроенных поставщиков членства. Это позаботится о вашей базе данных и обо всем этом автоматически. Не нужно изобретать велосипед.

person hmcclungiii    schedule 07.06.2010
comment
Использование провайдеров ASP.Net в WinForms небезопасно: stackoverflow.com/questions/1002645/. - person Groo; 07.06.2010
comment
@Groo: Тот же аргумент можно выдвинуть против любой системы, которая обрабатывает данные локально, хотя вы можете обойти это, запустив его через локальную сеть. Вы можете достаточно легко использовать ACL, чтобы избежать предоставления пользователям разрешений на замену любого исполняемого файла, но на самом деле, если ваши пользователи достаточно квалифицированы для этого и достаточно мотивированы, чтобы прорваться, вы все равно в значительной степени обречены на большинство локальных решений. . - person Brian; 07.06.2010
comment
Небольшое приложение, используемое локально для малого бизнеса, не похоже на то, что они нуждаются в безопасности Fort Knox;) - person hmcclungiii; 07.06.2010

Хотя я ориентирован на ASP.NET, я бы настоятельно рекомендовал ознакомиться с этой статьей: http://www.4guysfromrolla.com/articles/120705-1.aspx

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

Наконец, официальные статьи MSDN, которые вы, возможно, захотите прочитать:

В разделе «Членство»: http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

В разделе «Роли»: http://msdn.microsoft.com/en-us/library/ff647401.aspx

person Martin Eve    schedule 07.06.2010