From f002969cc1242236b9ecbaffbaa234cc80ef5bac Mon Sep 17 00:00:00 2001 From: Albert S Date: Tue, 5 Oct 2021 21:51:31 +0200 Subject: [PATCH] PermissionsDao: Add save() --- database/permissionsdao.h | 1 + database/permissionsdaosqlite.cpp | 18 ++++++++++++++++++ database/permissionsdaosqlite.h | 1 + 3 files changed, 20 insertions(+) diff --git a/database/permissionsdao.h b/database/permissionsdao.h index 94feb9f..7082abe 100644 --- a/database/permissionsdao.h +++ b/database/permissionsdao.h @@ -7,6 +7,7 @@ class PermissionsDao public: PermissionsDao(); virtual std::optional find(std::string pagename, std::string username) = 0; + virtual void save(std::string pagename, std::string username, Permissions perms) = 0; }; #endif // PERMISSIONSDAO_H diff --git a/database/permissionsdaosqlite.cpp b/database/permissionsdaosqlite.cpp index a9c5507..7c5018d 100644 --- a/database/permissionsdaosqlite.cpp +++ b/database/permissionsdaosqlite.cpp @@ -41,3 +41,21 @@ std::optional PermissionsDaoSqlite::find(std::string pagename, std: return Permissions{permissions}; } + +void PermissionsDaoSqlite::save(std::string pagename, std::string username, Permissions perms) +{ + try + { + auto query = + *db + << "INSERT OR REPLACE INTO permissions (id, permissions, userid, page) VALUES((SELECT id FROM permissions " + "WHERE page = (SELECT id FROM page WHERE name = ?) AND userid = (SELECT id FROM user WHERE username = " + "?)), ?, (SELECT id FROM user WHERE username = ?), (SELECT id FROM page WHERE name = ?))"; + query << pagename << username << perms.getPermissions() << username << pagename; + query.execute(); + } + catch(const sqlite::errors::no_rows &e) + { + throwFrom(e); + } +} diff --git a/database/permissionsdaosqlite.h b/database/permissionsdaosqlite.h index d0da690..39d03f9 100644 --- a/database/permissionsdaosqlite.h +++ b/database/permissionsdaosqlite.h @@ -9,6 +9,7 @@ class PermissionsDaoSqlite : public PermissionsDao, protected SqliteDao PermissionsDaoSqlite(); std::optional find(std::string pagename, std::string username) override; + virtual void save(std::string pagename, std::string username, Permissions perms) override; using SqliteDao::SqliteDao; };