From 789981ee925227e1fa894533167fa26f5d9414d8 Mon Sep 17 00:00:00 2001 From: Simon Goller Date: Fri, 26 Apr 2024 22:30:10 +0200 Subject: [PATCH] Imporove datamodel Tables now contain update_timestamp and update_process and update_timestamp will be automatically set via a trigger. Also the I removed the IDs from the tables as they are not required for the auth system. The names are the identifier. --- dao_impl/src/lib.rs | 6 +-- migrations/20240426150045_user-roles.sql | 58 +++++++++++++++++++----- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/dao_impl/src/lib.rs b/dao_impl/src/lib.rs index 3a7d35d..08030b5 100644 --- a/dao_impl/src/lib.rs +++ b/dao_impl/src/lib.rs @@ -36,9 +36,9 @@ impl dao::PermissionDao for PermissionDaoImpl { async fn has_privilege(&self, user: &str, privilege: &str) -> Result { let result = query!( r"SELECT count(*) as results FROM user - INNER JOIN user_role ON user.id = user_role.user_id - INNER JOIN role ON user_role.role_id = role.id - INNER JOIN role_privilege ON role.id = role_privilege.role_id + INNER JOIN user_role ON user.name = user_role.user_name + INNER JOIN role ON user_role.role_name = role.name + INNER JOIN role_privilege ON role.name = role_privilege.role_name WHERE role_privilege.privilege_name = ? AND user.name = ?", privilege, user, diff --git a/migrations/20240426150045_user-roles.sql b/migrations/20240426150045_user-roles.sql index c70841e..b9f9295 100644 --- a/migrations/20240426150045_user-roles.sql +++ b/migrations/20240426150045_user-roles.sql @@ -1,29 +1,63 @@ -- Add migration script here CREATE TABLE user ( - id BLOB(16) NOT NULL PRIMARY KEY, - name TEXT NOT NULL + name TEXT NOT NULL PRIMARY KEY, + update_timestamp TEXT, + update_process TEXT NOT NULL ); +CREATE TRIGGER user_update_timestamp + AFTER UPDATE ON user + BEGIN + UPDATE user SET update_timestamp = DATETIME('now') WHERE rowid = old.rowid; + END; CREATE TABLE role ( - id BLOB(16) NOT NULL PRIMARY KEY, - name TEXT NOT NULL + name TEXT NOT NULL PRIMARY KEY, + update_timestamp TEXT, + update_process TEXT NOT NULL ); +CREATE TRIGGER role_update_timestamp + AFTER UPDATE ON role + BEGIN + UPDATE role SET update_timestamp = DATETIME('now') WHERE rowid = old.rowid; + END; CREATE TABLE privilege ( - name TEXT NOT NULL PRIMARY KEY + name TEXT NOT NULL PRIMARY KEY, + update_timestamp TEXT, + update_process TEXT NOT NULL ); +CREATE TRIGGER privilege_update_timestamp + AFTER UPDATE ON privilege + BEGIN + UPDATE privilege SET update_timestamp = DATETIME('now') WHERE rowid = old.rowid; + END; CREATE TABLE user_role ( - user_id BLOB(16) NOT NULL, - role_id BLOB(16) NOT NULL, - CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE, - CONSTRAINT fk_role FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE - + user_name TEXT NOT NULL, + role_name TEXT NOT NULL, + update_timestamp TEXT, + update_process TEXT NOT NULL, + CONSTRAINT fk_user FOREIGN KEY (user_name) REFERENCES user(name) ON DELETE CASCADE, + CONSTRAINT fk_role FOREIGN KEY (role_name) REFERENCES role(name) ON DELETE CASCADE + UNIQUE (user_name, role_name) ); +CREATE TRIGGER user_role_update_timestamp + AFTER UPDATE ON user_role + BEGIN + UPDATE user_role SET update_timestamp = DATETIME('now') WHERE rowid = old.rowid; + END; CREATE TABLE role_privilege ( - role_id BLOB(16) NOT NULL, + role_name TEXT NOT NULL, privilege_name TEXT NOT NULL, - CONSTRAINT fk_group FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE, + update_timestamp TEXT, + update_process TEXT NOT NULL, + CONSTRAINT fk_group FOREIGN KEY (role_name) REFERENCES role(name) ON DELETE CASCADE, CONSTRAINT fk_privilege FOREIGN KEY (privilege_name) REFERENCES privilege(name) ON DELETE CASCADE + UNIQUE (role_name, privilege_name) ); +CREATE TRIGGER role_privilege_update_timestamp + AFTER UPDATE ON role_privilege + BEGIN + UPDATE role_privilege SET update_timestamp = DATETIME('now') WHERE rowid = old.rowid; + END;