Я хочу реализовать роли и полномочия на веб-приложении, которое мы создали, и я смотрю на использование Системы. Сеть. Безопасность. SqlRoleProvider для реализации этого. Моя проблема состоит в том, что каждый клиент захочет смочь настроить, кто может и не может выполнить действия в системе, и никакие два клиента не захотят то же, таким образом создавая основного Администратора, Пользователя, роли менеджера для покрытия, все не будут достаточны.
То, что я предлагаю сделать для каждого экрана, создают роли следующим образом
Screen1Create, Screen1Update, Screen1Delete, Screen1Read
Screen2Create, Screen2Update, Screen2Delete, Screen2Read
и так далее.
Я затем позволил бы клиенту выбирать роли на пользователя, который будет сохранен в cookie, когда пользователь войдет в систему.
Я мог затем считать cookie и использовать user.isinrole, чтобы проверить, может ли каждый метод назвать текущий пользователь.
Я понимаю, что существует ограничение размера с cookie, о которых я должен знать. Независимо форма, что, это звучит выполнимым, есть ли как лучший способ сделать это?
Большое спасибо за любой вход.
На самом деле, если вы хотите запрограммировать все это самостоятельно на уровень cookie, вы рискуете открыть дыры в безопасности. Для этого используется проверка подлинности с помощью форм в сочетании с авторизацией на основе ролей. Asp.net предоставит пользователю защищенный от несанкционированного доступа файл cookie.
Если вы реализуете роли, вы можете легко пометить методы:
[PrincipalPermission(SecurityAction.Demand, Role="Screen1Create")]
или использовать код, чтобы увидеть, есть ли у кого-то конкретная роль.
Много информации: http://weblogs.asp.net/scottgu/archive/2006/02/24/ASP.NET-2.0-Membership_2C00_-Roles_2C00_-Forms-Authentication_2C00_-and-Security-Resources-.aspx
Помните, что файлы cookie - это вводимые пользователем данные, поэтому, если вы собираетесь хранить привилегии пользователей в файлах cookie, вы должны использовать хеш-функцию с ключом (например, HMAC-SHA256), чтобы убедитесь, что пользователи не предоставляют себе дополнительных разрешений.
Или, если вы сохраните все разрешения в своей базе данных, она будет постоянна на всех клиентских компьютерах, и вам не нужно будет проверять ее целостность каждый раз, когда вы захотите ее использовать.