En lugar de dividir cada permiso en columnas individuales o en tablas de servidor sql, estamos reconsiderando el uso del atributo Flag
en Enum
para utilizarlo con operaciones de bits. Nuestra aplicación define los puntos finales (no el de los servicios de descanso) para acceder a los recursos (leer, modificar, actualizar) y cada usuario tiene derecho a permisos, por ejemplo, Bob has permissions to Read, Modify resource X
, cuando bob entra y accede a este recurso, verificamos si bob tiene permiso x.Now que, cuando vamos a aplicar esto está claro que aquí están mis dudasEnumeraciones para definir conjuntos de permisos en C#
Supongamos que Bob tiene de lectura, escritura, eliminar el permiso de recurso mediante enumeraciones marcados yo haría
Permission.Read | Permission.Write | Permission.Delete
es el resultado final de bits AND de una entero u otro Enum?Para almacenar este permiso en la tabla de la base de datos ¿debería la columna ser
integer
?Si la respuesta a la pregunta 1 es
Enum
, ¿debería definir otra propiedad en la enumeraciónPermissions
que represente el valor entero de Bit wise y la operación?
disclaimer:
el Bob se hace referencia en el ejemplo no representa ningún usuario en la red de sitios de desbordamiento de pila o cualquier persona. Es solo otro carácter
@Mathhew justo fuera de mi cabeza Almacenar el resultado de O bit a bit en la tabla como un entero. ¿Cómo debo hacer mi verificación de permiso en la aplicación? hablando en código aquí 'if (IntegerFromDb == Permissions.Read) {print" ¡Correcto! "; } 'debería ** analizar el Entero a Enum de tipo Permisos ** y hacer el control? – Deeptechtons
@Deeptechtons: Puedes convertir fácilmente cualquier entero al tipo de enumeración: 'var perms = (Permissions) IntegerFromDb'. Esta es la forma más segura, sin embargo, creo que es posible que pueda comparar directamente con el código que he incluido anteriormente sin un reparto. Siempre compare el 'y' con el valor esperado, especialmente si usa valores combinados como el 'ReadWrite' sugerido porque es posible tener uno y no el otro y engañar a una verificación de estilo'! = None'. –
@Deeptechtons: Asegúrese de leer mis notas en el punto n. ° 3 acerca de los valores de sanación para las enumeraciones. C# puede jugar algo horrible si lanzas un entero a una enumeración que no tiene sentido para el valor dado. –