Skip to content
Snippets Groups Projects
Unverified Commit c191c47f authored by Anton Kulyk's avatar Anton Kulyk Committed by GitHub
Browse files

Respect DB management permission for model caching (#23507)

* Add `can-manage` property to `Database` types

* Only show enable/disable caching with DB access

* Rename `tooltip` which is not a tooltip anymore

* Remove redundant variable
parent 8655a146
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,9 @@ import LoadingSpinner from "metabase/components/LoadingSpinner";
import { delay } from "metabase/lib/promise";
import { CardApi } from "metabase/services";
import Databases from "metabase/entities/databases";
import Database from "metabase-lib/lib/metadata/Database";
import Question from "metabase-lib/lib/Question";
import { SpinnerContainer } from "./ModelCacheControl.styled";
......@@ -17,6 +20,10 @@ interface ModelCacheControlProps {
onChange?: (isPersisted: boolean) => void;
}
type DatabaseEntityLoaderProps = {
database?: Database;
};
function ModelCacheControl({
model,
size,
......@@ -24,8 +31,7 @@ function ModelCacheControl({
...props
}: ModelCacheControlProps) {
const [isLoading, setLoading] = useState(false);
const isPersisted = model.isPersisted();
const tooltip = isPersisted ? t`Unpersist model` : t`Persist model`;
const label = model.isPersisted() ? t`Unpersist model` : t`Persist model`;
const handleClick = useCallback(async () => {
const id = model.id();
......@@ -46,14 +52,28 @@ function ModelCacheControl({
}
}, [model, onChange]);
return isLoading ? (
<SpinnerContainer>
<LoadingSpinner size={size} />
</SpinnerContainer>
) : (
<Button {...props} icon="database" onClick={handleClick} iconSize={size}>
{tooltip}
</Button>
return (
<Databases.Loader id={model.databaseId()} loadingAndErrorWrapper={false}>
{({ database }: DatabaseEntityLoaderProps) => {
if (!database || !database["can-manage"]) {
return null;
}
return isLoading ? (
<SpinnerContainer>
<LoadingSpinner size={size} />
</SpinnerContainer>
) : (
<Button
{...props}
icon="database"
onClick={handleClick}
iconSize={size}
>
{label}
</Button>
);
}}
</Databases.Loader>
);
}
......
......@@ -25,6 +25,9 @@ class DatabaseInner extends Base {
schemas: Schema[];
metadata: Metadata;
// Only appears in GET /api/database/:id
"can-manage"?: boolean;
// TODO Atte Keinänen 6/11/17: List all fields here (currently only in types/Database)
displayName() {
return this.name;
......
......@@ -15,4 +15,7 @@ export interface Database {
timezone?: string;
native_permissions: NativePermissions;
initial_sync_status: InitialSyncStatus;
// Only appears in GET /api/database/:id
"can-manage"?: boolean;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment