Role system + some administration features
This commit is contained in:
parent
e2a3f560c1
commit
241571ba5d
2 changed files with 45 additions and 17 deletions
|
@ -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.' };
|
|
||||||
|
|
||||||
backendParams['user'] = user;
|
if ((!user || user == '') && AUTH_ACTIONS.indexOf(route) != -1) return {'success': 'Not authorized.' };
|
||||||
}
|
|
||||||
|
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 id = ?', [
|
||||||
|
id
|
||||||
|
])
|
||||||
|
} else {
|
||||||
await db.run('DELETE FROM post WHERE username = ? AND id = ?', [
|
await db.run('DELETE FROM post WHERE username = ? AND id = ?', [
|
||||||
user,
|
user,
|
||||||
id
|
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};
|
||||||
|
|
|
@ -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}
|
||||||
|
|
Loading…
Reference in a new issue