Лучший подход к ролям пользователей с интранет-приложением
Я занимаюсь разработкой веб-сайта ASP.NET MVC для интрасети, который должен иметь несколько разных пользовательских ролей (администратор, редактор, писатель и т. Д.), А серверная часть использует SQL Server. Я прочитал этот пост Скотту о роли безопасности и использовал его в качестве отправной точки. Шаги, которые я выполнил, были:
Настроил БД с помощью приложения asp_regsql.exe. Установите режим аутентификации для Windows.
<authentication mode = "Window" />
Добавлена запись строки подключения в Web.config,
<connectionStrings>
<add name="SqlRoleManagerConnection"
connectionString="Data Source=localhost; Initial Catalog=aspservicedb; Integrated Security=SSPI;" />
</connectionStrings>
Добавлена запись roleManager в раздел Web.config,
<roleManager enabled="true" defaultProvider="sqlRoleManager">
<providers>
<clear />
<add name="sqlRoleManager" type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlRoleManagerConnection"
applicationName="MyApplication" />
</providers>
</roleManager>
Добавлен некоторый код роли в метод Application_Start() файла Global.asax.cs,
if (!Roles.RoleExists("Editor"))
{
Roles.CreateRole("Editor");
}
if (!Roles.RoleExists("Writer"))
{
Roles.CreateRole("Writer");
}
if (!Roles.RoleExists("SiteAdmin"))
{
Roles.CreateRole("SiteAdmin");
Roles.AddUserToRole("MYCOMPUTER\\Matt", "SiteAdmin");
}
Модифицированы мои контроллеры для использования ролей:
[Authorize(Roles = "SiteAdmin")]
public class SiteAdminController : Controller
{
.
.
.
}
И на данный момент все это работает, но мне интересно, есть ли лучший подход к распределению ролей или есть проблемы с этим подходом. Легко убедить себя в том, что подход хорош, потому что он работал, но я бы хотел использовать другой подход сейчас, а не позже, если это не лучший подход к решению проблемы. В другом месте я читал, что кто-то говорил, что это "взлом", но никогда не понимал, почему он не решит проблему таким способом. Твои мысли? У вас есть что лучше, чтобы решить эту проблему?
2 ответа
В некоторых моих производственных приложениях MVC я просто использую встроенный поставщик ролей sql. Он работает "из коробки", ваши шаблоны MVC3 будут настроены для его использования. Просто откройте сайт администратора из Visual Studio и управляйте безопасностью, добавляйте свои роли, пользователей, пользователей в роли и т. Д. И все. Не используйте ваш web.config для управления тем, какие роли имеют доступ к каким URI. Это рекомендуется снова и снова избегать использования в MVC, поскольку более одного URI может потенциально попасть на один маршрут, поэтому вы используете (как вы это делали)) атрибут Authorize в сочетании с автоматическим управлением ролями, и это все, что вам нужно. Это довольно просто.
Ну, есть две альтернативы, которые стоит упомянуть:
- Настройте свое основанное на роли право безопасности в веб-конфигурации. Это централизует вашу конфигурацию безопасности, хотя она должна быть обновлена, чтобы отразить ваши пути / маршрутизацию, так что требуется немного ручного обслуживания
- Сконфигурируйте свою безопасность на основе ролей в базе данных и создайте настраиваемый фильтр действий для чтения, кэширования и применения этих ролей на основе зарегистрированного пользователя. Это динамично, но немного сложнее, потому что вам, вероятно, придется создать экран администратора для редактирования конфигурации.
Дайте мне знать, если вам нужны примеры из них, и я могу связать вас.