import RedisClient from "./redis/RedisClient"; class CheckPermissionStore { db:any redisClient: RedisClient constructor (db : any, redisClient: RedisClient) { this.db = db; this.redisClient = redisClient; } //EV-608 company id async checkUserPermission (userId : string, permission:string,company_id:string) { const result = await this.db.oneOrNone(` SELECT * FROM role_user_permissions WHERE user_id = $1 AND permission_id = ( SELECT permission_id FROM permissions WHERE permission_name = $2 ) AND company_id=$3 `, [userId, permission,company_id]); return result ? result.enabled === 'true' : null; } async checkRolePermission(roleId : string, permission:string,company_id:string) { const result = await this.db.oneOrNone(` SELECT * FROM role_user_permissions WHERE role_id = $1 AND permission_id = ( SELECT permission_id FROM permissions WHERE permission_name = $2 ) AND company_id=$3 `, [roleId, permission,company_id]); return result ? (result.enabled === true ? true : false) : false; } async checkPermission(roleId : string, userId : string, delegateeId: string, permission : string,company_id:string) { const userInRedis = await this.redisClient.getObject(`user:${userId}del:${delegateeId}`); if (userInRedis) { const permItem = userInRedis.permissions.find((perm: any) => perm.permission_name === permission); return permItem && permItem.enabled; } const userPermission = await this.checkUserPermission(userId, permission,company_id); if (userPermission) { return true; } const rolePermission = await this.checkRolePermission(roleId, permission,company_id); if (rolePermission) { return true; } return false; } } export default CheckPermissionStore