1bcb9bf973
Also some tests are added.
46 lines
1.5 KiB
SQL
46 lines
1.5 KiB
SQL
create table "group" (
|
|
id_group BIGSERIAL PRIMARY KEY,
|
|
groupname TEXT UNIQUE
|
|
);
|
|
|
|
create table privilege (
|
|
id_privilege BIGSERIAL PRIMARY KEY,
|
|
name TEXT UNIQUE
|
|
);
|
|
|
|
create table group_privilege (
|
|
id_group BIGINT,
|
|
id_privilege BIGINT,
|
|
PRIMARY KEY (id_group, id_privilege),
|
|
FOREIGN KEY (id_group) REFERENCES "group" (id_group),
|
|
FOREIGN KEY (id_privilege) REFERENCES "privilege" (id_privilege)
|
|
);
|
|
|
|
create table "user" (
|
|
id_user BIGSERIAL PRIMARY KEY,
|
|
username TEXT UNIQUE NOT NULL,
|
|
matrix_address TEXT UNIQUE NOT NULL,
|
|
password_bcrypt TEXT NOT NULL,
|
|
is_confirmed BOOLEAN DEFAULT false,
|
|
creation_date TIMESTAMP NOT NULL,
|
|
id_group BIGINT NOT NULL,
|
|
last_connection TIMESTAMP NOT NULL,
|
|
FOREIGN KEY (id_group) REFERENCES "group" (id_group)
|
|
);
|
|
|
|
CREATE INDEX index_user ON "user" (username, matrix_address);
|
|
CREATE INDEX index_group ON "group" (groupname);
|
|
CREATE INDEX index_privileges ON "privilege" (name);
|
|
|
|
INSERT INTO privilege (name) VALUES ( 'CREATE_USER' ), ( 'DELETE_USER' ), ( 'LIST_USERS' ), ( 'UPDATE_USERS' );
|
|
INSERT INTO "group" (groupname) VALUES ( 'admin' );
|
|
INSERT INTO group_privilege (id_group, id_privilege)
|
|
SELECT
|
|
(
|
|
SELECT id_group from "group" where groupname='admin'
|
|
) as id_group,
|
|
id_privilege
|
|
FROM privilege
|
|
WHERE name in ( 'create_user', 'delete_user', 'list_users', 'update_users' );
|
|
|