diff --git a/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx b/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx index 78050de93d..5236a529eb 100644 --- a/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx +++ b/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx @@ -45,6 +45,7 @@ export const QueryCard = ({ dataQuery, darkMode = false, localDs }) => { const featureAccess = useStore((state) => state?.license?.featureAccess, shallow); const licenseValid = !featureAccess?.licenseStatus?.isExpired && featureAccess?.licenseStatus?.isLicenseValid; + const isRestricted = dataQuery.permissions && dataQuery.permissions.length !== 0; const shouldFreeze = useStore((state) => state.getShouldFreeze()); @@ -140,6 +141,31 @@ export const QueryCard = ({ dataQuery, darkMode = false, localDs }) => { [duplicateQuery] ); + const getTooltip = () => { + const permission = dataQuery.permissions?.[0]; + if (!permission) return null; + + const users = permission.groups || permission.users || []; + if (users.length === 0) return null; + + const isSingle = permission.type === 'SINGLE'; + const isGroup = permission.type === 'GROUP'; + + if (isSingle) { + return users.length === 1 + ? `Access restricted to ${users[0].user.email}` + : `Access restricted to ${users.length} users`; + } + + if (isGroup) { + return users.length === 1 + ? `Access restricted to ${users[0].permission_group?.name || users[0].permissionGroup?.name} group` + : `Access restricted to ${users.length} user groups`; + } + + return null; + }; + return ( <>
{ data-tooltip-dynamic="true" > {decodeEntities(dataQuery.name)} - {' '} + + +
+ {licenseValid && isRestricted && } +
+
{' '} {!isQueryRunnable(dataQuery) && Draft} {localDs && ( <> diff --git a/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx b/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx index 44340bbcbf..62f27197ba 100644 --- a/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx +++ b/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx @@ -196,7 +196,7 @@ export const QueryDataPane = ({ darkMode }) => { if (query.id === selectedQuery.id) { return { ...query, - permissions: data.length === 0 ? [] : data[0], + permissions: data.length === 0 || data.length === undefined ? [] : [data[0]], }; } return query;