I’m programming a new application with many users, a few roles and specific permissions for those roles. For that I want to create the following tables:
Users (ID,Login, password,..)
Roles(ID,Rolename)
User_Roles(User_ID, Role_ID)
Permissions(ID,PermissionName)
Permission_Roles(Permission_ID, Role_ID)
My idea was to build a function, which allows to check if a user has a specific permission to access a form. I would do that by creating Permissions/Rules like ‘canReadFormX’, ‘canEditFormX’ which would allow me to use one main function to check and perfom those specific rules and a function per form to call it.
Is that a way to go (or rather did I understand everything correctly regarding RBAC) or is that just far to complicated? Any advise is very appreciated!
It seems fair to me, and similar to what we have already set, for the first 3 tables.
You then have to solve the ‘action’ problem, ie to distribute permissions to use your appl’s actions. I am not sure that your ‘Permissions’ proposal will cover all the situations, as you have to deal with 2 major categories of actions:
One solution/My advice is to maintain 2 tables for this:
And the corresponding link tables:
With such a configuration, you are fully covered. You can even decide which role has the right to see a specific report on a specific form, as long as the corresponding action is accessed through a specific control or menu on the form.
Both Forms and Actions tables are very interesting as they both participate in your application metamodel…
EDIT: By the way, if you are on a domain, you can use user’s domain credentials to control his\her access rights to your system. In this case you do not need to store a password in your RBAC system.