Tratando de gestionar el acceso a un sitio web que crearon algunas entidades necesarias ¿Es seguro usar reflejos y enumeraciones para el control lógico del acceso a la aplicación MVC?
El objetivo es utilizar un atributo de permiso personalizado para el método de la acción de algún controlador de mi aplicación MVC.
[Permissions(PermissionType.SomePermissionName, CrudType.CanDelete)]
public ActionResult SomeAction()
{
}
Para esta operación Tengo dos enumeraciones
[Flags]
public enum CrudType
{
CanCreate = 0x1,
CanRead = 0x2,
CanUpdate = 0x4,
CanDelete = 0x8,
}
[Flags]
public enum PermissionType
{
SomePermissionName = 0x1,
//...
}
ahora quiero el método siguiente para comprobar los permisos
public static bool CanAccess(RolePermissions rp, CrudType crudType)
{
var pInfo = rp.GetType().GetProperties();
var res = pInfo.FirstOrDefault(x => x.Name == crudType.ToString());
if(res != null)
{
return Convert.ToBoolean(res.GetValue(rp, null));
}
return false;
}
Funciona bien, pero ¿es seguro utilizar la reflexión aquí? ¿Es un buen estilo?
Una pregunta más se trata dicha pieza de código
var permission = PermissionService.GetByName(permissionType.ToString());
Aquí estoy tratando de conseguir un objeto de permiso de una base de datos utilizando alguna llamada constante del PermissionType
enumeración.
En ambos casos, el trabajo correcto depende de las relaciones entre las enumeraciones y algunos campos o registros de la tabla. Por otro lado, tengo un buen mecanismo para controlar la lógica (como me parece). ¿Es esa una buena manera?
¿Esto no está disponible en ASP.NET Membership APi? –
Realmente no me gusta la membresía.Además me gustaría usar mis propias clases, tablas propias, control propio, etc. – Shymep
¿Alguna razón que no te gusta, aparte de las clases propias, tablas propias, controles propios? Cuando estaba pensando en pasar a Membresía APi :( –