Лучший подход к ролям пользователей с интранет-приложением - PullRequest
4 голосов
/ 03 мая 2011

Я занимаюсь разработкой веб-сайта ASP.NET MVC для интрасети, который должен иметь несколько разных пользовательских ролей (администратор, редактор, писатель и т. Д.), А серверная часть использует SQL Server. Я прочитал этот пост от scottgu о безопасности на основе ролей и использовал это в качестве отправной точки. Шаги, которые я выполнил, были:

Настроил БД с помощью приложения 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 ]

3 голосов
/ 04 мая 2011

В некоторых моих производственных приложениях MVC я просто использую встроенный поставщик ролей sql. Это работает из коробки, ваши шаблоны MVC3 будут настроены для его использования. Просто откройте сайт администратора из Visual Studio и управляйте безопасностью, добавляйте свои роли, пользователей, пользователей в роли и т. Д. И все. Не используйте ваш web.config для управления тем, какие роли имеют доступ к каким URI. Это рекомендуется снова и снова избегать использования в MVC, поскольку более одного URI может потенциально попасть на один маршрут, поэтому вы используете (как вы это делали) ) атрибут Authorize в сочетании с автоматическим управлением ролями, и это все, что вам нужно. Это довольно просто.

2 голосов
/ 03 мая 2011

Ну, есть две альтернативы, которые стоит упомянуть:

  1. Настройте право безопасности на основе ролей в веб-конфигурации. Это централизует вашу конфигурацию безопасности, хотя она должна быть обновлена, чтобы отразить ваши пути / маршрутизацию, поэтому требуется немного ручного обслуживания
  2. Сконфигурируйте свою безопасность на основе ролей в базе данных и создайте настраиваемый фильтр действий для чтения, кэширования и применения этих ролей на основе зарегистрированного пользователя. Это динамично, но немного сложнее, потому что вам, вероятно, придется создать экран администратора для редактирования конфигурации.

Дайте мне знать, если вам нужны примеры из них, и я могу связать вас.

...