131 lines
2.3 KiB
TypeScript
131 lines
2.3 KiB
TypeScript
import { Entity, Column, OneToMany, ManyToOne, PrimaryGeneratedColumn, Generated, Unique, JoinTable, ManyToMany } from "typeorm";
|
|
import { IsBoolean, IsEmail, IsInt, IsNotEmpty, IsOptional, IsPhoneNumber, IsString, isUUID, } from "class-validator";
|
|
import { UserGroup } from './UserGroup';
|
|
import { Permission } from './Permission';
|
|
import { UserAction } from './UserAction';
|
|
|
|
/**
|
|
* 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;
|
|
|
|
/**
|
|
* user phone
|
|
*/
|
|
@IsPhoneNumber("ZZ")
|
|
@IsOptional()
|
|
phone: 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, { nullable: true })
|
|
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;
|
|
|
|
/**
|
|
* actions
|
|
*/
|
|
@OneToMany(() => UserAction, action => action.user)
|
|
actions: UserAction
|
|
|
|
/**
|
|
* calculate all permissions
|
|
*/
|
|
public get calc_permissions(): Permission[] {
|
|
let final_permissions = []
|
|
this.groups.forEach((permission) => {
|
|
if (!final_permissions.includes(permission)) {
|
|
final_permissions.push(permission)
|
|
}
|
|
})
|
|
this.permissions.forEach((permission) => {
|
|
if (!final_permissions.includes(permission)) {
|
|
final_permissions.push(permission)
|
|
}
|
|
})
|
|
return final_permissions
|
|
}
|
|
}
|