Search code examples
sqlrbac

sql server, How to create a key with duplicated values


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)

Solution

  • 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.