I'm creating a model for RBAC on sql server. I have my table for permissions and another for roles. My doubt is, how can I make the role a key with duplicated values.
This is a fragment:
CREATE TABLE permissions (permission int NOT NULL, name varchar(50) NOT NULL, PRIMARY KEY (permission))
INSERT INTO permissions (permission, name) VALUES (1, 'createUser')
INSERT INTO permissions (permission, name) VALUES (2, 'deleteUser')
INSERT INTO permissions (permission, name) VALUES (4, 'editUserInfo')
INSERT INTO permissions (permission, name) VALUES (8, 'grantPermissions')
CREATE TABLE roles (role varchar(50) NOT NULL, permission int NOT NULL, FOREIGN KEY (permission) REFERENCES permissions(permission))
INSERT INTO roles (role, permission) VALUES ('admin', 1)
INSERT INTO roles (role, permission) VALUES ('admin', 2)
INSERT INTO roles (role, permission) VALUES ('admin', 4)
INSERT INTO roles (role, permission) VALUES ('admin', 8)
You can't and don't want to do that. Your roles
table should have 1 row per role. But then you add a 3rd table that serves as a mapping between your roles
and permissions
tables.
Something like this:
roles <----> role_permission_mappings <----> permissions
So your roles
table's key would be role
.
And your role_permission_mappings
table's key would be (role,permission)
.
EDIT
SQL Fiddle for an example of what this may look like.