From 241571ba5d3416923c0cc86aed1b83ab9e066338 Mon Sep 17 00:00:00 2001 From: tdgmdev Date: Wed, 8 Mar 2023 19:49:39 -0500 Subject: [PATCH] Role system + some administration features --- src/lib/db/db.js | 51 +++++++++++++++++++++------- src/routes/users/[user]/+page.svelte | 11 +++--- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/lib/db/db.js b/src/lib/db/db.js index 80f52ec..8b356c0 100644 --- a/src/lib/db/db.js +++ b/src/lib/db/db.js @@ -15,6 +15,12 @@ const LEGAL_SORTS = { 'hot': `rating / (%d - time + 24000)` } +const roles = [ + 'Owner', + 'Admin', + 'Veteran' +] + const FILE_SIZE_LIMIT = 1024*1024*16; const VALID_EXTENSIONS = ['png','jpg','jpeg','gif','svg', 'mp4']; @@ -47,12 +53,16 @@ async function initDb() { let backendProxy = async ({route, backendParams}) => { if (!db) await initDb(); - if (AUTH_ACTIONS.indexOf(route) != -1) { - var user = (await backend.token({cookies: backendParams.cookies})).data; - if (!user || user == '') return {'success': 'Not authorized.' }; + var user = (await backend.token({cookies: backendParams.cookies})).data; + + if ((!user || user == '') && AUTH_ACTIONS.indexOf(route) != -1) return {'success': 'Not authorized.' }; - backendParams['user'] = user; - } + var isAdmin = false; + if (user && user != '') isAdmin = (await userRoles(user)).indexOf('Admin') != -1; + + backendParams['admin'] = isAdmin; + + if (AUTH_ACTIONS.indexOf(route) != -1) backendParams['user'] = user; return backend[route](backendParams); } @@ -176,16 +186,29 @@ backend.postCreate = async ({content, user}) => { return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; } -backend.postDelete = async ({id, user}) => { - - await db.run('DELETE FROM post WHERE username = ? AND id = ?', [ - user, - id - ]) +backend.postDelete = async ({id, user, admin}) => { + if (admin) { + await db.run('DELETE FROM post WHERE id = ?', [ + id + ]) + } else { + await db.run('DELETE FROM post WHERE username = ? AND id = ?', [ + user, + id + ]) + } return {'success': 'Your post has been deleted!', 'href': `/post/${id}` }; } +let userRoles = async ({user}) => { + var rolesLocal = await db.all('SELECT roles from bio WHERE username = ?', [ + user + ]); + + return roles.filter((elem,i) => ((rolesLocal % 1< { var posts = await db.all('SELECT * from user WHERE username = ?', [ user @@ -219,10 +242,12 @@ backend.userBio = async ({user}) => { return {'success': 'Bio does not exist.'} } + posts[0].rolesArr = (await userRoles(user)) || []; + return {data: posts[0]}; } -backend.postBulk = async ({page, id, user, cookies, sort, type}) => { +backend.postBulk = async ({page, id, user, cookies, sort, type, admin}) => { var posts; var userAuth = (await backend.token({cookies})).data || ''; @@ -267,7 +292,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}) => { } posts = posts.map(post => { - return {...post, isAuthor: userAuth == post.username}; + return {...post, isAuthor: userAuth == post.username || admin}; }) return {data: posts}; diff --git a/src/routes/users/[user]/+page.svelte b/src/routes/users/[user]/+page.svelte index 40f561d..638d269 100644 --- a/src/routes/users/[user]/+page.svelte +++ b/src/routes/users/[user]/+page.svelte @@ -48,7 +48,7 @@ } -{#if userData} +{#if userData && userBio} @@ -67,9 +67,12 @@

Downvotes: {userData.downvotes}

- {#if userBio && userBio.roles == 69} -

This user is an Owner.

- {/if} +

Roles

+

+ {#each userBio.rolesArr as role} + {role} + {/each} +

Following

{#each following as user}