Updated roles and permissions logic.

This commit is contained in:
Mike Cao 2022-12-06 18:36:41 -08:00
parent 4eb3140e43
commit b57ecf33e6
63 changed files with 432 additions and 546 deletions

View file

@ -1,57 +1,90 @@
/* eslint-disable no-unused-vars */
export enum EventType {
Pageview = 1,
Event = 2,
import { NextApiRequest } from 'next';
export interface Auth {
user?: {
id: string;
username: string;
role: string;
isAdmin: boolean;
};
shareToken?: string;
}
export enum AuthType {
Website,
User,
Team,
export interface NextApiRequestQueryBody<TQuery = any, TBody = any> extends NextApiRequest {
auth?: Auth;
query: TQuery & { [key: string]: string | string[] };
body: TBody;
headers: any;
}
export enum Permission {
all = 'all',
websiteCreate = 'website:create',
websiteUpdate = 'website:update',
websiteDelete = 'website:delete',
teamCreate = 'team:create',
teamUpdate = 'team:update',
teamDelete = 'team:delete',
export interface NextApiRequestAuth extends NextApiRequest {
auth?: Auth;
headers: any;
}
export enum Role {
Admin = 'admin',
User = 'user',
TeamOwner = 'team-owner',
TeamMember = 'team-member',
TeamGuest = 'team-guest',
export interface Website {
id: string;
userId: string;
revId: number;
name: string;
domain: string;
shareId: string;
createdAt: Date;
}
export const Roles = {
admin: { name: Role.Admin, permissions: [Permission.all] },
member: {
name: Role.User,
permissions: [
Permission.websiteCreate,
Permission.websiteUpdate,
Permission.websiteDelete,
Permission.teamCreate,
],
},
teamOwner: {
name: Role.TeamOwner,
permissions: [
Permission.teamUpdate,
Permission.teamDelete,
Permission.websiteCreate,
Permission.websiteUpdate,
Permission.websiteDelete,
],
},
teamMember: {
name: Role.TeamMember,
permissions: [Permission.websiteCreate, Permission.websiteUpdate, Permission.websiteDelete],
},
teamGuest: { name: Role.TeamGuest, permissions: [] },
};
export interface Share {
id: string;
token: string;
}
export interface Empty {}
export interface WebsiteActive {
x: number;
}
export interface WebsiteEventDataMetric {
[key: string]: number;
}
export interface WebsiteMetric {
x: string;
y: number;
}
export interface WebsiteEventMetric {
x: string;
t: string;
y: number;
}
export interface WebsitePageviews {
pageviews: {
t: string;
y: number;
};
sessions: {
t: string;
y: number;
};
}
export interface WebsiteStats {
pageviews: { value: number; change: number };
uniques: { value: number; change: number };
bounces: { value: number; change: number };
totalTime: { value: number; change: number };
}
export interface RealtimeInit {
websites: Website[];
token: string;
data: RealtimeUpdate;
}
export interface RealtimeUpdate {
pageviews: any[];
sessions: any[];
events: any[];
timestamp: number;
}