Pois eh, explicar isto nao eh exatamente simples, mas vamos tentar chegar a uma checklist:
- Tu precisa inibir o acesso as actions por default (isso eh primordial)
- Precisa ter uma forma de dizer que uma action eh publica, privada a um determinado papel de usuarios ou que eh privado a apenas um usuario (imagine que em um blog, "blogueiros"podem editar posts, mas somente os seus proprios posts...)
- Precisas de mecanismos para dizer que essa ou aquela action eh uma action de uma determinada "funcao" (read, create, update, delete), de forma que seja possivel entre outras coisas, inibir o acesso a actions como new, que precedem a action de create, afinal um usuario nao deve poder acessar nem o formulario que levaria ao create se nao tiver permissao para criar por exemplo.
- Eh interessante tu impedir que os links que sao mostrados na pagina, considerem o poder de acesso do usuario e nao permita ao mesmo ver links para paginas que nao pode acessar
- Quanto a interface, tu precisa no minimo, poder vincular cada action com uma funcao (read, create, update, delete) evincular permissoes para cada conjunto paopel de usuario + action + funcao (qualquer um pode ver coisas em um blog, mas soh o dono pode editar posts por exemplo).
- Certas permissoes precisam ser definidas com um conceito de "posse atraves", como por exemplo, um blogueiro soh pode criar posts em seu proprio blog, portanto, Create de posts eh controlado atraves do owner do Blog, o recurso pai no caso.
Essa checklist eh soh superficial e dela derivam as MUITAS escolhas que tu precisa fazer para chegar a uma solucao para este tipo de problema. Por exemplo, eh preciso que tu decida como vai querer identificar as actions em questao e se de fato vais querer controlar o acesso para cada action.. eu na minha engine nao fiz dessa forma, eu acrescentei mais uma camada aih, estabelecendo que permissoes sao definidas para "categorias de ferramentas", e as actions passam a pertencer a uma determinada categoria (o que pode ser mudado dinamicamente).
Tem aih varios outros porems... eu tou repassando essa listinha apenas para ressaltar o como criar uma coisa dessas nao eh nada trivial, especialmente quando se quer uma solucao generica (reaproveitavel)... cada aplicacao tem uma realidade bem especifica, tu precisa identificar as propriedades da aplicacao que tu deseja criar e apartir de entao modelar a coisa. Nao tem como aqui eu dar um passo a paso ou apontar todos os problemas que tu vai encontrar... na verdade existem MUITOS (simplesmente tu descobrir todas as actions jah vai ser um pequeno problema) e por aih seguem algumas das questoes...
Se tiveres alguma questao mais especifica, manda ae! Esse problema eh um dos que menos vejo evoluir e eh uma constante em todos os projetos em que trabalho...