2. Permissions El modelo de datos de los permisos es un mapeo entre privilegios, parties y objetos. En OpenaACS, un privilegio describe el derecho que se tiene a ejecutar alguna operación sobre algún objeto. En OpenACS, la tabla de privilegios está organizada jerárquicamente para que los desarrolladores puedan definir privilegios que agrupen a un conjunto de privilegios. Por ejemplo, es posible crear un nuevo privilegio llamado “admin” a partir de la combinación de: leer, escribir, crear y borrar. De esta forma, cuando a un usuario se le da el privilegio de administrador entonces automáticamente adquiere todos los privilegios que posee el conjunto.
3. Contexts OpenACSprovee contextos de objetos como una alternativa para controlar los permisos para un gran grupo de objetos al mismo tiempo. Un contexto es otro objeto que representa el dominio de seguridad al cual el objeto pertenece.
4. Parties Una party es una abstraccion de lo que son los grupos y las personas. Un party es un acs_object, asi que los permisos pueden ser otorgados o revocados a parties en sí. Hay aplicaciones que deben manejar usuarios individuales, grupos y en ocasiones ambos a la vez. Se utiliza el término party cuando estamos modelando usuarios individuales y grupos como un “super-tipo”.
5. Persons Si un party es un individuo, entonces va a haber un registro en la tabla de personas conteniendo su información relativa (first_names, last_name). La llave primaria (person_id) hace referencia a la llave primaria de la tabla parties (party_id), de esta forma se hace el mapeo de un individuo a un party.
6. Users La tabla de usuarios es más especializada que la tabla de personas. Un registro en la tabla de usuarios representa a un individuo que tiene login de acceso al sistema. La llave primaria de la tabla de usuarios hace referencia a la llave primaria de la tabla de personas; de esta forma es que se mapea a un usuario con una persona y por consiguiente a un party. El tener la información de un usuario en distintas tablas (users, parties, persons, acs_objects) me permite, por ejemplo, quitarle el acceso al usuario del sistema sin borrar su demas información.
7. Groups Un grupo es una especialización de un party que representa la agregación de 0 o más parties. La única información extra asociada a un grupo es el nombre del mismo. Las relaciones entre grupos representan derecta relación entre parties y grupos. Sin embargo, hay que tomar en cuenta que las relaciones no son por ejemplo, si X es miembro de Y yY es miembro de Z, eso no implica que X vaya a ser miembro de Z.