mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-18 00:51:15 +00:00
feat: completed ap, org roles and project roles and project membership
This commit is contained in:
@@ -1,10 +1,21 @@
|
||||
import { TDbClient } from "@app/db";
|
||||
import { TableName } from "@app/db/schemas";
|
||||
import { ormify } from "@app/lib/knex";
|
||||
import { ormify, selectAllTableCols } from "@app/lib/knex";
|
||||
|
||||
export type TAdditionalPrivilegeDALFactory = ReturnType<typeof additionalPrivilegeDALFactory>;
|
||||
|
||||
export const additionalPrivilegeDALFactory = (db: TDbClient) => {
|
||||
const orm = ormify(db, TableName.AdditionalPrivilege);
|
||||
return orm;
|
||||
|
||||
const getMembershipById = async (privilegeId: string) => {
|
||||
const doc = await db
|
||||
.replicaNode()(TableName.AdditionalPrivilege)
|
||||
.join(TableName.Membership, `${TableName.AdditionalPrivilege}.membershipId`, `${TableName.Membership}.id`)
|
||||
.select(selectAllTableCols(TableName.Membership))
|
||||
.where(`${TableName.AdditionalPrivilege}.id`, privilegeId)
|
||||
.first();
|
||||
return doc;
|
||||
};
|
||||
|
||||
return { ...orm, getMembershipById };
|
||||
};
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
TCreateAdditionalPrivilegesDTO,
|
||||
TDeleteAdditionalPrivilegesDTO,
|
||||
TGetAdditionalPrivilegesByIdDTO,
|
||||
TGetAdditionalPrivilegesByNameDTO,
|
||||
TListAdditionalPrivilegesDTO,
|
||||
TUpdateAdditionalPrivilegesDTO
|
||||
} from "./additional-privilege-types";
|
||||
@@ -71,7 +72,9 @@ export const additionalPrivilegeServiceFactory = ({
|
||||
permissions: JSON.stringify(packRules(data.permissions as RawRule[]))
|
||||
});
|
||||
|
||||
return { additionalPrivilege: { ...additionalPrivilege, permissions: data.permissions } };
|
||||
return {
|
||||
additionalPrivilege: { ...additionalPrivilege, permissions: unpackPermissions(additionalPrivilege.permissions) }
|
||||
};
|
||||
}
|
||||
|
||||
if (!data.temporaryAccessStartTime || !data.temporaryRange) {
|
||||
@@ -92,7 +95,9 @@ export const additionalPrivilegeServiceFactory = ({
|
||||
temporaryRange: data.temporaryRange
|
||||
});
|
||||
|
||||
return { additionalPrivilege: { ...additionalPrivilege, permissions: data.permissions } };
|
||||
return {
|
||||
additionalPrivilege: { ...additionalPrivilege, permissions: unpackPermissions(additionalPrivilege.permissions) }
|
||||
};
|
||||
};
|
||||
|
||||
const updateAdditionalPrivilege = async (dto: TUpdateAdditionalPrivilegesDTO) => {
|
||||
@@ -169,7 +174,7 @@ export const additionalPrivilegeServiceFactory = ({
|
||||
const getAdditionalPrivilegeById = async (dto: TGetAdditionalPrivilegesByIdDTO) => {
|
||||
const { scopeData, selector } = dto;
|
||||
const factory = scopeFactory[scopeData.scope];
|
||||
const { membershipId } = await factory.onListAdditionalPrivilegesGuard(dto);
|
||||
const { membershipId } = await factory.onGetAdditionalPrivilegesByIdGuard(dto);
|
||||
const additionalPrivilege = await additionalPrivilegeDAL.findOne({
|
||||
id: selector.id,
|
||||
membershipId
|
||||
@@ -182,6 +187,22 @@ export const additionalPrivilegeServiceFactory = ({
|
||||
};
|
||||
};
|
||||
|
||||
const getAdditionalPrivilegeByName = async (dto: TGetAdditionalPrivilegesByNameDTO) => {
|
||||
const { scopeData, selector } = dto;
|
||||
const factory = scopeFactory[scopeData.scope];
|
||||
const { membershipId } = await factory.onGetAdditionalPrivilegesByIdGuard(dto);
|
||||
const additionalPrivilege = await additionalPrivilegeDAL.findOne({
|
||||
name: selector.name,
|
||||
membershipId
|
||||
});
|
||||
if (!additionalPrivilege)
|
||||
throw new NotFoundError({ message: `Additional privilege with name ${selector.name} doesn't exist` });
|
||||
|
||||
return {
|
||||
additionalPrivilege: { ...additionalPrivilege, permissions: unpackPermissions(additionalPrivilege.permissions) }
|
||||
};
|
||||
};
|
||||
|
||||
const listAdditionalPrivileges = async (dto: TListAdditionalPrivilegesDTO) => {
|
||||
const { scopeData } = dto;
|
||||
const factory = scopeFactory[scopeData.scope];
|
||||
@@ -203,6 +224,7 @@ export const additionalPrivilegeServiceFactory = ({
|
||||
updateAdditionalPrivilege,
|
||||
deleteAdditionalPrivilege,
|
||||
getAdditionalPrivilegeById,
|
||||
getAdditionalPrivilegeByName,
|
||||
listAdditionalPrivileges
|
||||
};
|
||||
};
|
||||
|
||||
@@ -6,7 +6,9 @@ export interface TAdditionalPrivilegesScopeFactory {
|
||||
onUpdateAdditionalPrivilegesGuard: (arg: TUpdateAdditionalPrivilegesDTO) => Promise<{ membershipId: string }>;
|
||||
onDeleteAdditionalPrivilegesGuard: (arg: TDeleteAdditionalPrivilegesDTO) => Promise<{ membershipId: string }>;
|
||||
onListAdditionalPrivilegesGuard: (arg: TListAdditionalPrivilegesDTO) => Promise<{ membershipId: string }>;
|
||||
onGetAdditionalPrivilegesByIdGuard: (arg: TGetAdditionalPrivilegesByIdDTO) => Promise<{ membershipId: string }>;
|
||||
onGetAdditionalPrivilegesByIdGuard: (
|
||||
arg: TGetAdditionalPrivilegesByIdDTO | TGetAdditionalPrivilegesByNameDTO
|
||||
) => Promise<{ membershipId: string }>;
|
||||
getScopeField: (scope: AccessScopeData) => { key: "orgId" | "namespaceId" | "projectId"; value: string };
|
||||
}
|
||||
|
||||
@@ -71,3 +73,13 @@ export type TGetAdditionalPrivilegesByIdDTO = {
|
||||
actorType: MembershipActors;
|
||||
};
|
||||
};
|
||||
|
||||
export type TGetAdditionalPrivilegesByNameDTO = {
|
||||
permission: OrgServiceActor;
|
||||
scopeData: AccessScopeData;
|
||||
selector: {
|
||||
name: string;
|
||||
actorId: string;
|
||||
actorType: MembershipActors;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user