Digamos que tengo una aplicación ASP.Net MVC y esta aplicación (UI) hace referencia a una Capa Lógica Empresarial (BLL) y la BLL hace referencia a mi Capa de Acceso a Datos (DAL).Membresía .NET en la aplicación nTier
Estoy utilizando un proveedor personalizado de Membresía y Roles para la Autorización.
Estoy tratando de determinar qué capas necesitan hacer referencia a mi proveedor de membresía.
En MVC puede realizar comprobaciones de autorización de la siguiente manera:
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
Y en mi BLL que puede que desee comprobar para ver si un usuario está en un papel así:
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
Tendría que hacer referencia y crear instancias de las clases de Membresía en ambas capas si hago esto. ¿Es esta la forma correcta de diseñar una aplicación como esta? Parece mucha redundancia.
Como tengo un BLL, evito usar los atributos "[Authorize (Roles =" SomeRoleName ")]" y, en su lugar, invoco una función BLL dentro del código MVC para verificar si el usuario tiene un rol? Si hago esto, el MVC aún necesita una referencia al proveedor de membresía para la autenticación y, de todos modos, aprovechar el inicio de sesión y otros controles ASP, ¿verdad?
¿Estoy lejos de la base y voy en la dirección incorrecta?
Definitivamente use el atributo Autorizar en MVC. No es necesario que compruebe manualmente IsInRoles. –
El problema es que necesito procesar lógica de negocios adicional además de "IsInRole" o "Authorize", que pensé que debería estar siempre en el BLL. Podría pasar el objeto de usuario a todas partes, pero ¿por qué no dejar de lado el Autorizar y usar solo el BLL? – Jay