Ich entwickle eine ASP.NET MVC-Intranet-Website, die einige verschiedene Benutzerrollen haben muss (Admin, Redakteur, Autor usw.), und das Backend verwendet SQL Server. Ich lese diese Stelle von scottgu über rollenbasierte Sicherheit und nutzte dies als Ausgangspunkt. Die Schritte, die ich befolgt habe, waren:
Konfigurieren Sie eine DB mit der Anwendung asp_regsql.exe Setzen Sie den Authentifizierungsmodus auf Windows
<authentication mode = "Window" />
Hinzufügen eines Eintrags für die Verbindungszeichenfolge in der Web.config,
<connectionStrings>
<add name="SqlRoleManagerConnection"
connectionString="Data Source=localhost; Initial Catalog=aspservicedb; Integrated Security=SSPI;" />
</connectionStrings>
Der Web.config-Sektion wurde ein roleManager-Eintrag hinzugefügt,
<roleManager enabled="true" defaultProvider="sqlRoleManager">
<providers>
<clear />
<add name="sqlRoleManager" type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlRoleManagerConnection"
applicationName="MyApplication" />
</providers>
</roleManager>
In die Methode Application_Start() der Datei Global.asax.cs wurde ein Rollencode eingefügt,
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");
}
Ich habe meine Controller geändert, um die Rollen zu verwenden:
[Authorize(Roles = "SiteAdmin")]
public class SiteAdminController : Controller
{
.
.
.
}
Und das alles scheint im Moment zu funktionieren, aber ich frage mich, ob es einen besseren Ansatz für die Rollenverteilung gibt oder ob es Probleme mit diesem Ansatz gibt. Es ist leicht, sich davon zu überzeugen, dass der Ansatz gut ist, weil er funktioniert hat, aber ich würde gerne einen anderen Ansatz wählen jetzt eher als später, wenn dies nicht der beste Ansatz zur Lösung des Problems ist. An anderer Stelle habe ich gelesen, dass jemand sagte, dies sei ein "Hack", aber er hat nie wirklich begründet, warum er das Problem nicht auf diese Weise lösen würde. Ihre Meinung? Haben Sie eine bessere Lösung für dieses Problem?