Sistema de permisos de foro+CI+Datamapper

BLZKZ

Enamorado de CodeIgniter y datamapper por culpa de los hilos de pirado he llegado a un problema, que he dejado un par de meses en el congelador por culpa de los examenes...

Estoy programando un foro, y para terminar la logica del cms "sólo" me falta un sistema de permisos para roles de usuario y distintos foros.

Por miedo a crucifixiones de momento no pondré codigo, pues lo que me hace falta es ver como hariais las tablas y las relaciones para datamapper de los permisos.

Actualmente tengo una tabla forums, una tabla roles y una ultima que es permissions. Suponemos que todas tienen id (autoincremental) y nombre (si tiene algo más no es relevante xD). Lo que quiero es saber cómo relacionar las 3 para que funcione con las funcionalidades que me da datamapper; teniendo en cuenta que 1 foro tiene n permisos y un rol a la vez tiene relacion n con foros y n permisos pero no tiene por qué tener los mismos permisos en cada foro. Tambien añadir que todos los roles tendran todos los permisos definidos (si hay 20 permisos, debera tener los 20 ya sean como true o false vaya)

Espero haberme explicado, porque se me da bastante mal la verdad XD. Si no entendeis algo de lo que he dicho decidmelo y lo intentaré aclarar de otra forma

Gracias :)

PiradoIV

Yo lo que he probado es más o menos adaptar el sistema de usuarios de Django, ahí te explican la estructura de las tablas que preparan y los métodos de cada modelo. Funciona bastante bien.

Así de un vistazo:

  • Usuarios tiene muchos(Permisos, Grupos)
  • Permisos tiene muchos(Usuarios, Grupos)
  • Grupos tiene muchos(Usuarios, Permisos)

$permissions = Pillas todos los permisos del usuario y los permisos que tienen los grupos del usuario.

  • Con array_unique($permissions) puedes quitar los permisos duplicados.
  • Con in_array('can_create_thread', $permissions) puedes comprobar si el usuario tiene un permiso determinado.
  • Si quieres puedes reutilizar los grupos y los permisos para los foros

Usuarios habituales

  • PiradoIV
  • BLZKZ