Skip to content
Open
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ba7c4e3
refactor(permission): enhance privilege management by adding subject …
Mar 4, 2026
82334d2
refactor(permission): improve privilege checks with enhanced action a…
Mar 4, 2026
0605842
refactor(permission): enhance project member actions with new role an…
Mar 5, 2026
d4b87dc
refactor(permission): enhance error messaging and privilege handling …
Mar 5, 2026
f9fea52
refactor(permission): enhance privilege validation and UI interaction…
Mar 5, 2026
ceae491
refactor(permission): improve privilege validation and action handlin…
Mar 5, 2026
6cecf19
refactor(permission): update label for target email in member permiss…
Mar 5, 2026
ebdba65
refactor(permission): enhance action validation and condition extract…
Mar 5, 2026
3180fd3
refactor(permission): enhance action validation logic for project per…
Mar 5, 2026
d337b3c
refactor(permission): refine forbidden subject handling in condition …
Mar 5, 2026
09a1200
refactor(permission): introduce new identity actions and enhance priv…
Mar 5, 2026
3cc6ec2
refactor(permission): improve condition handling in privilege validation
Mar 5, 2026
a675996
refactor(permission): introduce AssignRole action and enhance group p…
Mar 5, 2026
747052b
refactor(permission): optimize legacy action handling in GeneralPermi…
Mar 5, 2026
2bf3930
refactor(permission): update role structure in permission service types
Mar 5, 2026
b768094
refactor(permission): enhance permission rules and condition extracti…
Mar 5, 2026
be40d4a
refactor(permission): streamline grant condition extraction and enhan…
Mar 5, 2026
7979f65
refactor(permission): introduce filter and modify functions for grant…
Mar 5, 2026
e7eaea2
refactor(permission): update project permission schema to include mem…
Mar 5, 2026
7836efa
refactor(permission): enhance privilege validation for project member…
Mar 5, 2026
04bc6b9
refactor(permission): extract and streamline subject-action condition…
Mar 6, 2026
b029513
refactor(permission): enhance project additional privileges validatio…
Mar 6, 2026
ca2dd61
refactor(permission): improve error handling in project membership id…
Mar 6, 2026
7644ba0
refactor(permission): rename and streamline grant privilege functions…
Mar 6, 2026
f10c6fb
refactor(permission): standardize permission fields and enhance valid…
Mar 6, 2026
f49fd00
fix(permission): improve role modification button logic and validation
Mar 6, 2026
e90d3c1
refactor(permission): remove unused import in IdentityRoleModify comp…
Mar 6, 2026
489719a
refactor(permission): streamline permission checks and enhance code r…
Mar 6, 2026
c8c857e
refactor(permission): enhance role modification logic and update cond…
Mar 6, 2026
5b8ab4c
refactor(permission): improve button disabled state logic in MemberRo…
Mar 6, 2026
db2c8ad
refactor(permission): enhance permission error messaging and update a…
Mar 9, 2026
51cfbbf
refactor(permission): simplify role selection logic in IdentityRoleMo…
Mar 9, 2026
d2e8bf8
refactor(permission): remove unused import in project additional priv…
Mar 9, 2026
9e547c8
refactor(permission): remove unused import in additional privilege se…
Mar 9, 2026
bda6aec
refactor(permission): remove unused import in route registration
Mar 9, 2026
27e2d78
refactor(permission): update action schema definitions for project pe…
Mar 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion backend/src/ee/services/permission/default-roles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ const buildAdminPermissionRules = () => {
ProjectPermissionMemberActions.Delete,
ProjectPermissionMemberActions.Read,
ProjectPermissionMemberActions.GrantPrivileges,
ProjectPermissionMemberActions.AssignRole,
ProjectPermissionMemberActions.AssignAdditionalPrivileges,
ProjectPermissionMemberActions.AssumePrivileges
],
ProjectPermissionSub.Member
Expand All @@ -192,7 +194,8 @@ const buildAdminPermissionRules = () => {
ProjectPermissionGroupActions.Edit,
ProjectPermissionGroupActions.Delete,
ProjectPermissionGroupActions.Read,
ProjectPermissionGroupActions.GrantPrivileges
ProjectPermissionGroupActions.GrantPrivileges,
ProjectPermissionGroupActions.AssignRole
],
ProjectPermissionSub.Groups
);
Expand All @@ -204,6 +207,8 @@ const buildAdminPermissionRules = () => {
ProjectPermissionIdentityActions.Delete,
ProjectPermissionIdentityActions.Read,
ProjectPermissionIdentityActions.GrantPrivileges,
ProjectPermissionIdentityActions.AssignRole,
ProjectPermissionIdentityActions.AssignAdditionalPrivileges,
ProjectPermissionIdentityActions.AssumePrivileges,
ProjectPermissionIdentityActions.GetToken,
ProjectPermissionIdentityActions.CreateToken,
Expand Down
75 changes: 72 additions & 3 deletions backend/src/ee/services/permission/permission-fns.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import { ActorAuthMethod, AuthMethod } from "@app/services/auth/auth-type";
import { OrgPermissionSet } from "./org-permission";
import {
ActionAllowedConditions,
ProjectPermissionGroupActions,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Application testing feedback

I feel like the message could cause confusion. Because i had assign role and just was condition only on those one. It works correctly, just the UI

Image Image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried to make this more generic, including the conditions. What do you think?

image

Refactoring the error with a detailed message on which condition failed and why would be a big change.

ProjectPermissionIdentityActions,
ProjectPermissionMemberActions,
ProjectPermissionSecretActions,
ProjectPermissionSet,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same in groups. I had permission for assignRole but the error said is not having it.

Image

ProjectPermissionSub,
Expand Down Expand Up @@ -102,6 +105,69 @@ export function checkForInvalidPermissionCombination(permissions: z.infer<typeof
}
}

if (permission.subject === ProjectPermissionSub.Member) {
if (permission.action.includes(ProjectPermissionMemberActions.GrantPrivileges)) {
const hasAssignRole = permission.action.includes(ProjectPermissionMemberActions.AssignRole);
const hasAssignAdditionalPrivileges = permission.action.includes(
ProjectPermissionMemberActions.AssignAdditionalPrivileges
);

if (hasAssignRole || hasAssignAdditionalPrivileges) {
const hasBothNewActions = hasAssignRole && hasAssignAdditionalPrivileges;

throw new BadRequestError({
message: `You have selected Grant Privileges, and ${
hasBothNewActions
? "both Assign Role and Assign Additional Privileges"
: hasAssignRole
? "Assign Role"
: hasAssignAdditionalPrivileges
? "Assign Additional Privileges"
: ""
}. You cannot select Assign Role or Assign Additional Privileges if you have selected Grant Privileges. The Grant Privileges permission is a legacy action which has been replaced by Assign Role and Assign Additional Privileges.`
});
}
}
}

if (permission.subject === ProjectPermissionSub.Identity) {
if (permission.action.includes(ProjectPermissionIdentityActions.GrantPrivileges)) {
const hasAssignRole = permission.action.includes(ProjectPermissionIdentityActions.AssignRole);
const hasAssignAdditionalPrivileges = permission.action.includes(
ProjectPermissionIdentityActions.AssignAdditionalPrivileges
);

if (hasAssignRole || hasAssignAdditionalPrivileges) {
const hasBothNewActions = hasAssignRole && hasAssignAdditionalPrivileges;

throw new BadRequestError({
message: `You have selected Grant Privileges, and ${
hasBothNewActions
? "both Assign Role and Assign Additional Privileges"
: hasAssignRole
? "Assign Role"
: hasAssignAdditionalPrivileges
? "Assign Additional Privileges"
: ""
}. You cannot select Assign Role or Assign Additional Privileges if you have selected Grant Privileges. The Grant Privileges permission is a legacy action which has been replaced by Assign Role and Assign Additional Privileges.`
});
}
}
}

if (permission.subject === ProjectPermissionSub.Groups) {
if (permission.action.includes(ProjectPermissionGroupActions.GrantPrivileges)) {
const hasAssignRole = permission.action.includes(ProjectPermissionGroupActions.AssignRole);

if (hasAssignRole) {
throw new BadRequestError({
message:
"You have selected Grant Privileges and Assign Role. You cannot select Assign Role if you have selected Grant Privileges. The Grant Privileges permission is a legacy action which has been replaced by Assign Role."
});
}
}
}

const subjectConditions = ActionAllowedConditions[permission.subject as ProjectPermissionSub];
const permissionConditions = "conditions" in permission ? permission.conditions : undefined;
if (permissionConditions && subjectConditions) {
Expand Down Expand Up @@ -190,10 +256,13 @@ const validatePrivilegeChangeOperation = (
opAction: OrgPermissionSet[0] | ProjectPermissionSet[0],
opSubject: OrgPermissionSet[1] | ProjectPermissionSet[1],
actorPermission: MongoAbility,
managedPermission: MongoAbility
managedPermission: MongoAbility,
subjectFields?: Record<string, string | undefined>
) => {
if (shouldUseNewPrivilegeSystem) {
if (actorPermission.can(opAction, opSubject)) {
const subjectToCheck = subjectFields ? subject(opSubject as string, subjectFields) : opSubject;

if (actorPermission.can(opAction, subjectToCheck)) {
return {
isValid: true,
missingPermissions: []
Expand Down Expand Up @@ -223,7 +292,7 @@ const constructPermissionErrorMessage = (
) => {
return `${baseMessage}${
shouldUseNewPrivilegeSystem
? `. Actor is missing permission ${opAction as string} on ${opSubject as string}`
? `. Actor is missing permission to perform ${opAction as string} on ${opSubject as string}`
: ". Actor privilege level is not high enough to perform this action"
}`;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,10 @@ export type TPermissionServiceFactory = {
permission: MongoAbility<ProjectPermissionSet, MongoQuery>;
role?: {
name: string;
id: string;
createdAt: Date;
updatedAt: Date;
slug: string;
id?: string;
createdAt?: Date;
updatedAt?: Date;
permissions?: unknown;
description?: string | null | undefined;
};
Expand Down
3 changes: 2 additions & 1 deletion backend/src/ee/services/permission/permission-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,8 @@ export const permissionServiceFactory = ({
{
conditionsMatcher
}
)
),
role: { name: el.name, slug: el.name }
};
});
};
Expand Down
Loading
Loading