1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

Merge remote-tracking branch 'origin/fix-check-for-admin-permission-in-group-access-assignment' into pick-all-roles

This commit is contained in:
Gastón Fournier 2024-06-18 15:03:24 +02:00
commit cdfa4eb7fe
No known key found for this signature in database
GPG Key ID: AF45428626E17A8E
2 changed files with 19 additions and 10 deletions

View File

@ -38,6 +38,8 @@ import { caseInsensitiveSearch } from 'utils/search';
import type { IServiceAccount } from 'interfaces/service-account'; import type { IServiceAccount } from 'interfaces/service-account';
import { MultipleRoleSelect } from 'component/common/MultipleRoleSelect/MultipleRoleSelect'; import { MultipleRoleSelect } from 'component/common/MultipleRoleSelect/MultipleRoleSelect';
import type { IUserProjectRole } from '../../../../interfaces/userProjectRoles'; import type { IUserProjectRole } from '../../../../interfaces/userProjectRoles';
import { useCheckProjectPermissions } from 'hooks/useHasAccess';
import { ADMIN } from 'component/providers/AccessProvider/permissions';
const StyledForm = styled('form')(() => ({ const StyledForm = styled('form')(() => ({
display: 'flex', display: 'flex',
@ -119,6 +121,8 @@ export const ProjectAccessAssign = ({
useProjectApi(); useProjectApi();
const edit = Boolean(selected); const edit = Boolean(selected);
const checkPermissions = useCheckProjectPermissions(projectId);
const { setToastData, setToastApiError } = useToast(); const { setToastData, setToastApiError } = useToast();
const navigate = useNavigate(); const navigate = useNavigate();
@ -323,11 +327,10 @@ export const ProjectAccessAssign = ({
const isValid = selectedOptions.length > 0 && selectedRoles.length > 0; const isValid = selectedOptions.length > 0 && selectedRoles.length > 0;
const displayAllRoles = const displayAllRoles =
checkPermissions(ADMIN) ||
userRoles.length === 0 || userRoles.length === 0 ||
userRoles.some( userRoles.some((userRole) => userRole.name === 'Owner');
(userRole) =>
userRole.name === 'Admin' || userRole.name === 'Owner',
);
let filteredRoles: IRole[]; let filteredRoles: IRole[];
if (displayAllRoles) { if (displayAllRoles) {
filteredRoles = roles; filteredRoles = roles;

View File

@ -52,6 +52,7 @@ import {
SYSTEM_USER_ID, SYSTEM_USER_ID,
type ProjectCreated, type ProjectCreated,
type IProjectOwnersReadModel, type IProjectOwnersReadModel,
ADMIN,
} from '../../types'; } from '../../types';
import type { import type {
IProjectAccessModel, IProjectAccessModel,
@ -838,16 +839,21 @@ export default class ProjectService {
} }
private async isAllowedToAddAccess( private async isAllowedToAddAccess(
userAddingAccess: number, userAddingAccess: IAuditUser,
projectId: string, projectId: string,
rolesBeingAdded: number[], rolesBeingAdded: number[],
): Promise<boolean> { ): Promise<boolean> {
const userPermissions =
await this.accessService.getPermissionsForUser(userAddingAccess);
if (userPermissions.some(({ permission }) => permission === ADMIN)) {
return true;
}
const userRoles = await this.accessService.getAllProjectRolesForUser( const userRoles = await this.accessService.getAllProjectRolesForUser(
userAddingAccess, userAddingAccess.id,
projectId, projectId,
); );
if ( if (
this.isAdmin(userAddingAccess, userRoles) || this.isAdmin(userAddingAccess.id, userRoles) ||
this.isProjectOwner(userRoles, projectId) this.isProjectOwner(userRoles, projectId)
) { ) {
return true; return true;
@ -864,7 +870,7 @@ export default class ProjectService {
users: number[], users: number[],
auditUser: IAuditUser, auditUser: IAuditUser,
): Promise<void> { ): Promise<void> {
if (await this.isAllowedToAddAccess(auditUser.id, projectId, roles)) { if (await this.isAllowedToAddAccess(auditUser, projectId, roles)) {
await this.accessService.addAccessToProject( await this.accessService.addAccessToProject(
roles, roles,
groups, groups,
@ -924,7 +930,7 @@ export default class ProjectService {
await this.validateAtLeastOneOwner(projectId, ownerRole); await this.validateAtLeastOneOwner(projectId, ownerRole);
} }
const isAllowedToAssignRoles = await this.isAllowedToAddAccess( const isAllowedToAssignRoles = await this.isAllowedToAddAccess(
auditUser.id, auditUser,
projectId, projectId,
newRoles, newRoles,
); );
@ -975,7 +981,7 @@ export default class ProjectService {
await this.validateAtLeastOneOwner(projectId, ownerRole); await this.validateAtLeastOneOwner(projectId, ownerRole);
} }
const isAllowedToAssignRoles = await this.isAllowedToAddAccess( const isAllowedToAssignRoles = await this.isAllowedToAddAccess(
auditUser.id, auditUser,
projectId, projectId,
newRoles, newRoles,
); );