59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
![]() |
import { Types } from "mongoose";
|
||
|
|
||
|
import { PermissionModel } from "@/models/permission.model";
|
||
|
|
||
|
import { PERMISSIONS, PERMISSION_LIST } from "@/constants/permissions";
|
||
|
import { ERROR_INVALID_PARAMS, ERROR_NOT_FOUND } from "@/constants/errors";
|
||
|
|
||
|
import type { Account } from "@/types/models/account.type";
|
||
|
import type { AccountService } from "./permission.interface";
|
||
|
import type { Permission } from "@/types/models/permission.type";
|
||
|
|
||
|
type PermissionServiceDeps = {
|
||
|
readonly accountService: AccountService;
|
||
|
};
|
||
|
|
||
|
export class PermissionService {
|
||
|
private accountService: AccountService;
|
||
|
|
||
|
constructor(deps: PermissionServiceDeps) {
|
||
|
this.accountService = deps.accountService;
|
||
|
}
|
||
|
|
||
|
public async deleteAccount(account: Account): Promise<boolean> {
|
||
|
try {
|
||
|
const role = await this.accountService.determineAccountRole(account);
|
||
|
|
||
|
if (!role.permissions[PERMISSIONS.deleteAccount]) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
} catch {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public async getAllPermissions(): Promise<Permission[]> {
|
||
|
const permissions = await PermissionModel.find({}).lean();
|
||
|
|
||
|
return [...permissions, ...PERMISSION_LIST];
|
||
|
}
|
||
|
|
||
|
public async removePermission(id: string, permission: Permission): Promise<Permission> {
|
||
|
if (!Types.ObjectId.isValid(id)) {
|
||
|
throw ERROR_INVALID_PARAMS;
|
||
|
}
|
||
|
|
||
|
const findedPermission = await PermissionModel.findByIdAndUpdate(id, {
|
||
|
$set: permission,
|
||
|
});
|
||
|
|
||
|
if (!findedPermission) {
|
||
|
throw ERROR_NOT_FOUND;
|
||
|
}
|
||
|
|
||
|
return permission;
|
||
|
}
|
||
|
}
|