Role system + some administration features

This commit is contained in:
tdgmdev 2023-03-08 19:49:39 -05:00
parent e2a3f560c1
commit 241571ba5d
2 changed files with 45 additions and 17 deletions

View file

@ -15,6 +15,12 @@ const LEGAL_SORTS = {
'hot': `rating / (%d - time + 24000)` 'hot': `rating / (%d - time + 24000)`
} }
const roles = [
'Owner',
'Admin',
'Veteran'
]
const FILE_SIZE_LIMIT = 1024*1024*16; const FILE_SIZE_LIMIT = 1024*1024*16;
const VALID_EXTENSIONS = ['png','jpg','jpeg','gif','svg', 'mp4']; const VALID_EXTENSIONS = ['png','jpg','jpeg','gif','svg', 'mp4'];
@ -47,12 +53,16 @@ async function initDb() {
let backendProxy = async ({route, backendParams}) => { let backendProxy = async ({route, backendParams}) => {
if (!db) await initDb(); if (!db) await initDb();
if (AUTH_ACTIONS.indexOf(route) != -1) { var user = (await backend.token({cookies: backendParams.cookies})).data;
var user = (await backend.token({cookies: backendParams.cookies})).data;
if (!user || user == '') return {'success': 'Not authorized.' }; 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); return backend[route](backendParams);
} }
@ -176,16 +186,29 @@ backend.postCreate = async ({content, user}) => {
return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` };
} }
backend.postDelete = async ({id, user}) => { backend.postDelete = async ({id, user, admin}) => {
if (admin) {
await db.run('DELETE FROM post WHERE username = ? AND id = ?', [ await db.run('DELETE FROM post WHERE id = ?', [
user, 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}` }; 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<<i) == 0));
};
backend.userGet = async ({user}) => { backend.userGet = async ({user}) => {
var posts = await db.all('SELECT * from user WHERE username = ?', [ var posts = await db.all('SELECT * from user WHERE username = ?', [
user user
@ -219,10 +242,12 @@ backend.userBio = async ({user}) => {
return {'success': 'Bio does not exist.'} return {'success': 'Bio does not exist.'}
} }
posts[0].rolesArr = (await userRoles(user)) || [];
return {data: posts[0]}; 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 posts;
var userAuth = (await backend.token({cookies})).data || ''; var userAuth = (await backend.token({cookies})).data || '';
@ -267,7 +292,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}) => {
} }
posts = posts.map(post => { posts = posts.map(post => {
return {...post, isAuthor: userAuth == post.username}; return {...post, isAuthor: userAuth == post.username || admin};
}) })
return {data: posts}; return {data: posts};

View file

@ -48,7 +48,7 @@
} }
</style> </style>
{#if userData} {#if userData && userBio}
<Area> <Area>
<span slot="header" id='header'> <span slot="header" id='header'>
<img class='pfp' src='/pfp/{userData.username}.png'/> <img class='pfp' src='/pfp/{userData.username}.png'/>
@ -67,9 +67,12 @@
<p> <p>
<b>Downvotes:</b> {userData.downvotes} <b>Downvotes:</b> {userData.downvotes}
</p> </p>
{#if userBio && userBio.roles == 69} <h2>Roles</h2>
<p><b>This user is an Owner.</b></p> <p>
{/if} {#each userBio.rolesArr as role}
<i class='follower'>{role}</i>
{/each}
</p>
<h2>Following</h2> <h2>Following</h2>
{#each following as user} {#each following as user}