En mi aplicación típica, el usuario hace clic en un botón en una página aspx, invoca un objeto comercial C# y luego ejecuta un procedimiento almacenado.¿En qué parte de la pila de llamadas deben realizarse las comprobaciones de roles?
¿Se deberían realizar controles de roles en la parte superior de la pila, en la parte inferior de la pila o en todos los niveles? Parece que si un usuario malintencionado puede invocar un método, podría invocar alguno, por lo que para una seguridad efectiva, necesitaría verificar todos los métodos (y eso es mucho código adicional para escribir).
Aquí está una pila de llamadas típica para ilustrar mi pregunta:
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