import { Entity, Column, OneToMany, ManyToOne, PrimaryGeneratedColumn, Generated, Unique, JoinTable, ManyToMany } from "typeorm"; import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsString, isUUID, } from "class-validator"; import { UserGroup } from './UserGroup'; import { Permission } from './Permission'; /** * Defines a admin user. */ @Entity() export class User { /** * autogenerated unique id (primary key). */ @PrimaryGeneratedColumn() @IsOptional() @IsInt() id: number; /** * autogenerated uuid */ @IsOptional() @IsInt() @Generated("uuid") uuid: string; /** * user email */ @IsEmail() email: string; /** * username */ @IsString() username: string; /** * firstname */ @IsString() @IsNotEmpty() firstname: string; /** * middlename */ @IsString() @IsOptional() middlename: string; /** * lastname */ @IsString() @IsNotEmpty() lastname: string; /** * password */ @IsString() @IsNotEmpty() password: string; /** * permissions */ @ManyToOne(() => Permission, permission => permission.users) permissions: Permission[]; /** * groups */ @ManyToMany(() => UserGroup) @JoinTable() groups: UserGroup[]; /** * is user enabled? */ @IsBoolean() enabled: boolean; /** * jwt refresh count */ @IsInt() @Column({ default: 1 }) refreshTokenCount: number; /** * profilepic */ @IsString() profilepic: string; /** * calculate all permissions */ public get calc_permissions(): Permission[] { let final_permissions = this.groups.forEach((permission) => { console.log(permission); }) // TODO: add user permissions on top of group permissions + return return [] } }