In meiner typischen App klickt der Benutzer auf eine Schaltfläche in einer aspx-Seite, ruft ein C# -Geschäftsobjekt auf und führt dann eine gespeicherte Prozedur aus.Wo in der Aufrufliste sollten Rollenprüfungen durchgeführt werden?
Sollten Rollenprüfungen oben im Stapel, im unteren Bereich des Stapels oder auf jeder Ebene durchgeführt werden? Es scheint, dass wenn ein böswilliger Benutzer eine Methode aufrufen kann, er alle aufrufen kann, so dass für eine effektive Sicherheit eine Überprüfung für jede Methode erforderlich ist (und das ist viel zusätzlicher Code zum Schreiben).
Hier ist ein typischer Call-Stack meine Frage zu erläutern:
Page_Load()
{
if(p.IsInRole("Managers")) //or equivalent attribute
{
AddAccount.Visible =true;
}
}
AddAccount_OnClick()
{
if(p.IsInRole("Managers")) //or equivalent attribute
{
//Add the account
Account.Add(...); //and maybe another role check...
}
}
-- TSQL doesn't understand .NET authorization, this call is in a 'trusted' subsystem
create proc Add_Account @user, @account_name
If @user in (Select user from role_table where role='manager')
-- Add the account