RBAC: Correctly display the new roles after updating user, service account and team roles (#113783)
always fetch the new roles after updating user/team roles
This commit is contained in:
@@ -44,23 +44,25 @@ export const TeamRolePicker = ({
|
||||
width,
|
||||
isLoading,
|
||||
}: Props) => {
|
||||
const [{ loading, value: appliedRoles = roles || [] }, getTeamRoles] = useAsyncFn(async () => {
|
||||
try {
|
||||
if (roles) {
|
||||
return roles;
|
||||
const [{ loading, value: appliedRoles = roles || [] }, getTeamRoles] = useAsyncFn(
|
||||
async (force = false) => {
|
||||
try {
|
||||
if (!force && roles) {
|
||||
return roles;
|
||||
}
|
||||
if (!force && apply && Boolean(pendingRoles?.length)) {
|
||||
return pendingRoles;
|
||||
}
|
||||
if (contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesList) && teamId > 0) {
|
||||
return await fetchTeamRoles(teamId);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error fetching roles', e);
|
||||
}
|
||||
if (apply && Boolean(pendingRoles?.length)) {
|
||||
return pendingRoles;
|
||||
}
|
||||
|
||||
if (contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesList) && teamId > 0) {
|
||||
return await fetchTeamRoles(teamId);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error loading options', e);
|
||||
}
|
||||
return [];
|
||||
}, [teamId, pendingRoles, roles]);
|
||||
return [];
|
||||
},
|
||||
[teamId, pendingRoles, roles]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
getTeamRoles();
|
||||
@@ -69,7 +71,7 @@ export const TeamRolePicker = ({
|
||||
const onRolesChange = async (roles: Role[]) => {
|
||||
if (!apply) {
|
||||
await updateTeamRoles(roles, teamId);
|
||||
await getTeamRoles();
|
||||
await getTeamRoles(true); // Force fetch from backend after update
|
||||
} else if (onApplyRoles) {
|
||||
onApplyRoles(roles);
|
||||
}
|
||||
|
||||
@@ -54,24 +54,25 @@ export const UserRolePicker = ({
|
||||
width,
|
||||
isLoading,
|
||||
}: Props) => {
|
||||
const [{ loading, value: appliedRoles = roles || [] }, getUserRoles] = useAsyncFn(async () => {
|
||||
try {
|
||||
if (roles) {
|
||||
return roles;
|
||||
const [{ loading, value: appliedRoles = roles || [] }, getUserRoles] = useAsyncFn(
|
||||
async (force = false) => {
|
||||
try {
|
||||
if (!force && roles) {
|
||||
return roles;
|
||||
}
|
||||
if (!force && apply && Boolean(pendingRoles?.length)) {
|
||||
return pendingRoles;
|
||||
}
|
||||
if (contextSrv.hasPermission(AccessControlAction.ActionUserRolesList) && userId > 0) {
|
||||
return await fetchUserRoles(userId, orgId);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error fetching user roles');
|
||||
}
|
||||
if (apply && Boolean(pendingRoles?.length)) {
|
||||
return pendingRoles;
|
||||
}
|
||||
|
||||
if (contextSrv.hasPermission(AccessControlAction.ActionUserRolesList) && userId > 0) {
|
||||
return await fetchUserRoles(userId, orgId);
|
||||
}
|
||||
} catch (e) {
|
||||
// TODO handle error
|
||||
console.error('Error loading options');
|
||||
}
|
||||
return [];
|
||||
}, [orgId, userId, pendingRoles, roles]);
|
||||
return [];
|
||||
},
|
||||
[orgId, userId, pendingRoles, roles]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
// only load roles when there is an Org selected
|
||||
@@ -83,7 +84,7 @@ export const UserRolePicker = ({
|
||||
const onRolesChange = async (roles: Role[]) => {
|
||||
if (!apply) {
|
||||
await updateUserRoles(roles, userId, orgId);
|
||||
await getUserRoles();
|
||||
await getUserRoles(true); // Force fetch from backend after update
|
||||
} else if (onApplyRoles) {
|
||||
onApplyRoles(roles, userId, orgId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user