Probablemente almaceno los detalles de cada campo, y luego los roles y el estado que pueden editarlos, y lo hago de esa manera.
¿Cuáles son las reglas del sistema? Básicamente, ¿hay realmente 300 condiciones posibles? ¿O es realmente cierto que los campos solo son editables para cierto estado, y solo ciertos roles pueden editar esos campos? ¿O es que ciertos campos están disponibles para ciertos roles también?
Si se trata de más de lo primero probablemente tendría algo como esto:
tres tablas principales (hace que sea fácil de extender si se agrega un campo, el papel o el estado):
Luego, dos mesas de enlace:
- Field.Id y Role.Id
- Field.Id y Status.Id
Entonces, para cualquier orden dado y el usuario puede entonces encontrar qué campos son editables por el estado actual de la orden, y la función de los usuarios, y mientras trabaja en los campos, establezca los derechos de acceso de forma apropiada, independientemente de cómo configure los controles, ya sea generando dinámicamente en función de la colección que obtiene o estáticamente en la página.
Si tiene un problema donde la función puede anular el estado, también puede almacenar un booleano en la tabla de campo/función, que indica si el campo debe estar disponible independientemente del estado.