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.
This commit is contained in:
parent
dccfa2d4cf
commit
789981ee92
2 changed files with 49 additions and 15 deletions
|
|
@ -36,9 +36,9 @@ impl dao::PermissionDao for PermissionDaoImpl {
|
|||
async fn has_privilege(&self, user: &str, privilege: &str) -> Result<bool, dao::DaoError> {
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue