diff --git a/public/app/core/components/OwnerReferences/OwnerReference.tsx b/public/app/core/components/OwnerReferences/OwnerReference.tsx
index bbc1ac8fd74..78e25cb5b70 100644
--- a/public/app/core/components/OwnerReferences/OwnerReference.tsx
+++ b/public/app/core/components/OwnerReferences/OwnerReference.tsx
@@ -1,22 +1,23 @@
-import { OwnerReference as OwnerReferenceType } from '@grafana/api-clients/rtkq/folder/v1beta1';
-import { useGetTeamQuery } from '@grafana/api-clients/rtkq/iam/v0alpha1';
+import { Team } from '@grafana/api-clients/rtkq/iam/v0alpha1';
import { reportInteraction } from '@grafana/runtime';
import { Text, Link } from '@grafana/ui';
+import { contextSrv } from 'app/core/services/context_srv';
/**
* Display a team owner reference as a link to team details page
*/
-export const OwnerReference = ({ ownerReference }: { ownerReference: OwnerReferenceType }) => {
- const { data: team, isLoading: isLoadingTeam } = useGetTeamQuery({ name: ownerReference.uid });
-
- if (isLoadingTeam || !team) {
- return null;
+export const OwnerReference = ({ team }: { team: Team }) => {
+ // Check if the user is admin, because this is the quickest way (for now)
+ // to be sure that they'll definitely be able to view the team details page in question
+ // In the future, we'll check the access control permissions for the specific team in question
+ const isAdmin = contextSrv.hasRole('Admin') || contextSrv.isGrafanaAdmin;
+ if (!isAdmin) {
+ return {team.spec.title};
}
-
return (
reportInteraction('grafana_owner_reference_link_clicked')}
>
{team.spec.title}
diff --git a/public/app/features/browse-dashboards/components/FolderDetailsActions/FolderDetailsActions.tsx b/public/app/features/browse-dashboards/components/FolderDetailsActions/FolderDetailsActions.tsx
index 40ddc2d3110..e5c3d3a2e68 100644
--- a/public/app/features/browse-dashboards/components/FolderDetailsActions/FolderDetailsActions.tsx
+++ b/public/app/features/browse-dashboards/components/FolderDetailsActions/FolderDetailsActions.tsx
@@ -1,6 +1,8 @@
import { css } from '@emotion/css';
+import { skipToken } from '@reduxjs/toolkit/query';
import { OwnerReference as OwnerReferenceType } from '@grafana/api-clients/rtkq/folder/v1beta1';
+import { useGetTeamQuery } from '@grafana/api-clients/rtkq/iam/v0alpha1';
import { GrafanaTheme2 } from '@grafana/data';
import { Trans } from '@grafana/i18n';
import { config, reportInteraction } from '@grafana/runtime';
@@ -9,6 +11,7 @@ import { CombinedFolder, useGetFolderQueryFacade } from 'app/api/clients/folder/
import { OwnerReference } from 'app/core/components/OwnerReferences/OwnerReference';
import { contextSrv } from 'app/core/services/context_srv';
import { useGetResourceRepositoryView } from 'app/features/provisioning/hooks/useGetResourceRepositoryView';
+import { AccessControlAction } from 'app/types/accessControl';
import { getFolderPermissions } from '../../permissions';
import CreateNewButton from '../CreateNewButton';
@@ -26,12 +29,11 @@ export const FolderDetailsActions = ({ folderDTO }: { folderDTO?: CombinedFolder
});
};
- // For now, only admins can see folder owners
- const isAdmin = contextSrv.hasRole('Admin') || contextSrv.isGrafanaAdmin;
+ const canReadTeams = contextSrv.hasPermission(AccessControlAction.ActionTeamsRead);
return (
- {isAdmin && config.featureToggles.teamFolders && folderDTO && 'ownerReferences' in folderDTO && (
+ {canReadTeams && config.featureToggles.teamFolders && folderDTO && 'ownerReferences' in folderDTO && (
)}
{config.featureToggles.restoreDashboards && (
@@ -60,8 +62,10 @@ export const FolderDetailsActions = ({ folderDTO }: { folderDTO?: CombinedFolder
const FolderOwners = ({ ownerReferences }: { ownerReferences?: OwnerReferenceType[] }) => {
const styles = useStyles2(getStyles);
const teamOwnerReferences = ownerReferences?.filter((ref) => ref.kind === 'Team');
+ const teamUid = teamOwnerReferences?.at(0)?.uid;
+ const { data: team, isLoading: isLoadingTeam } = useGetTeamQuery(teamUid ? { name: teamUid } : skipToken);
- if (!teamOwnerReferences || teamOwnerReferences.length === 0) {
+ if (!teamOwnerReferences || teamOwnerReferences.length === 0 || isLoadingTeam || !team) {
return null;
}
@@ -70,7 +74,7 @@ const FolderOwners = ({ ownerReferences }: { ownerReferences?: OwnerReferenceTyp
Owned by:
-
+
);
};