Eu já tive alguns problemas do tipo, como fazer a separação por cargos de usuários, inicialmente me foi meio impensável um jeito aceitável de fazer isso, mas posteriormente eu pensei em duas formas legais, que uso alternarnando entre elas:
uma coluna de cargo na tabela do usuario, e programar as permissões no código, não é tão prático, mas se forem poucas funções funciona bem pro propósito
uma tabela de cargo com as devidas permissões, cada permissão sendo uma coluna na tabela, depois só relacionar com uma coluna de cargo no usuário, isso é legal porque vc consegue facilmente mudar as funções de cada cargo, acho essa a ideia mais precisa no geral