In meiner typischen Anwendung 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.
Sollten Rollenprüfungen am Anfang des Stapels, am Ende des Stapels oder auf jeder Ebene durchgeführt werden? Es scheint, dass ein böswilliger Benutzer, der eine Methode aufrufen kann, jede beliebige Methode aufrufen kann. Für eine wirksame Sicherheit müsste also jede Methode überprüft werden (und das ist eine Menge zusätzlicher Code, der geschrieben werden muss).
Hier ist ein typischer Aufrufstapel zur Veranschaulichung meiner Frage:
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