Я занимаюсь разработкой веб-сайта 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
{
.
.
.
}
И на данный момент все это работает, но мне интересно, есть ли лучший подход к распределению ролей или есть проблемы с этим подходом. Легко убедить себя, что этот подход хорош, потому что он работал, но я бы хотел использовать другой подход сейчас , а не позже, если это не лучший подход к решению проблемы. В другом месте я читал, что кто-то говорил, что это «взлом», но никогда не понимал, почему он не решил проблему таким способом. Твои мысли? У вас есть что лучше, чтобы решить эту проблему?