Skip to content

Commit

Permalink
fix: don't allow deleting of crd source permissions
Browse files Browse the repository at this point in the history
fix: fix failing test

feat: add form for adding permissions in resource and fix form issues

Fixes #2246
  • Loading branch information
mainawycliffe committed Sep 27, 2024
1 parent f3be99c commit c3e4eb5
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 33 deletions.
4 changes: 4 additions & 0 deletions src/components/Connections/ConnectionFormModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,10 @@ export default function ConnectionFormModal({
permissionRequest={{
connectionId: formValue.id
}}
showAddPermission
newPermissionData={{
connection_id: formValue.id
}}
/>
</Tab>
</Tabs>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { PermissionTable } from "@flanksource-ui/api/types/permissions";
import FormikCheckbox from "@flanksource-ui/components/Forms/Formik/FormikCheckbox";
import FormikTextArea from "@flanksource-ui/components/Forms/Formik/FormikTextArea";
import FormikTextInput from "@flanksource-ui/components/Forms/Formik/FormikTextInput";
import CanEditResource from "@flanksource-ui/components/Settings/CanEditResource";
import {
toastError,
toastSuccess
Expand All @@ -29,7 +30,7 @@ import PermissionsSubjectControls from "./PermissionSubjectControls";
type PermissionFormProps = {
onClose: () => void;
isOpen: boolean;
data?: PermissionTable;
data?: Partial<PermissionTable>;
};

export default function PermissionForm({
Expand All @@ -43,7 +44,8 @@ export default function PermissionForm({
data?.config_id ||
data?.canary_id ||
data?.canary_id ||
data?.playbook_id
data?.playbook_id ||
data?.connection_id
);
}, [data]);

Expand Down Expand Up @@ -107,7 +109,7 @@ export default function PermissionForm({
config_id: data?.config_id,
canary_id: data?.canary_id,
playbook_id: data?.playbook_id,
deny: data?.deny,
deny: data?.deny ?? false,
description: data?.description,
connection_id: data?.connection_id,
created_at: data?.created_at,
Expand Down Expand Up @@ -147,34 +149,42 @@ export default function PermissionForm({
<FormikCheckbox name="deny" label="Is deny action" />
<FormikTextArea name="description" label="Description" />
</div>
<AuthorizationAccessCheck
resource={tables.permissions}
action="write"
<CanEditResource
id={data?.id}
name={"Permission"}
resourceType={"permissions"}
source={data?.source}
className="flex flex-col"
>
<div
className={clsx(
"flex items-center bg-gray-100 px-5 py-4",
data?.id ? "justify-between" : "justify-end"
)}
<AuthorizationAccessCheck
resource={tables.permissions}
action="write"
>
{data?.id && (
<DeletePermission
permissionId={data.id}
onDeleted={onClose}
<div
className={clsx(
"flex items-center bg-gray-100 px-5 py-4",
data?.id ? "justify-between" : "justify-end"
)}
>
{data?.id && (
<DeletePermission
permissionId={data.id}
onDeleted={onClose}
/>
)}
<Button
icon={
isLoading ? (
<FaSpinner className="animate-spin" />
) : undefined
}
type="submit"
text={data?.id ? "Save" : isLoading ? "Saving ..." : "Save"}
className="btn-primary"
/>
)}
<Button
icon={
isLoading ? (
<FaSpinner className="animate-spin" />
) : undefined
}
type="submit"
text={data?.id ? "Save" : isLoading ? "Saving ..." : "Save"}
className="btn-primary"
/>
</div>
</AuthorizationAccessCheck>
</div>
</AuthorizationAccessCheck>
</CanEditResource>
</Form>
</Formik>
</div>
Expand Down
34 changes: 32 additions & 2 deletions src/components/Permissions/PermissionsView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,36 @@ import {
fetchPermissions,
FetchPermissionsInput
} from "@flanksource-ui/api/services/permissions";
import { PermissionAPIResponse } from "@flanksource-ui/api/types/permissions";
import {
PermissionAPIResponse,
PermissionTable
} from "@flanksource-ui/api/types/permissions";
import useReactTablePaginationState from "@flanksource-ui/ui/DataTable/Hooks/useReactTablePaginationState";
import { useQuery } from "@tanstack/react-query";
import { useEffect, useState } from "react";
import { Button } from "..";
import PermissionForm from "./ManagePermissions/Forms/PermissionForm";
import PermissionsTable from "./PermissionsTable";

type PermissionsViewProps = {
permissionRequest: FetchPermissionsInput;
setIsLoading?: (isLoading: boolean) => void;
hideResourceColumn?: boolean;
newPermissionData?: Partial<PermissionTable>;
showAddPermission?: boolean;
};

export default function PermissionsView({
permissionRequest,
setIsLoading = () => {},
hideResourceColumn = false
hideResourceColumn = false,
newPermissionData,
showAddPermission = false
}: PermissionsViewProps) {
const [selectedPermission, setSelectedPermission] =
useState<PermissionAPIResponse>();
const { pageSize, pageIndex } = useReactTablePaginationState();
const [isPermissionModalOpen, setIsPermissionModalOpen] = useState(false);

const { isLoading, data, refetch } = useQuery({
queryKey: [
Expand Down Expand Up @@ -51,6 +60,17 @@ export default function PermissionsView({

return (
<>
{showAddPermission && (
<div className="flex flex-row items-center justify-between p-2">
<Button
onClick={() => {
setIsPermissionModalOpen(true);
}}
>
Add Permission
</Button>
</div>
)}
<PermissionsTable
permissions={permissions}
isLoading={isLoading}
Expand All @@ -69,6 +89,16 @@ export default function PermissionsView({
data={selectedPermission}
/>
)}
{showAddPermission && (
<PermissionForm
data={newPermissionData}
isOpen={isPermissionModalOpen}
onClose={() => {
setIsPermissionModalOpen(false);
refetch();
}}
/>
)}
</>
);
}
4 changes: 4 additions & 0 deletions src/components/Playbooks/Settings/PlaybookSpecFormModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ export default function PlaybookSpecFormModal({
permissionRequest={{
playbookId: playbook.id
}}
showAddPermission
newPermissionData={{
playbook_id: playbook.id
}}
/>
</Tab>
</Tabs>
Expand Down
6 changes: 4 additions & 2 deletions src/components/SchemaResourcePage/resourceTypes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ export type SchemaResourceType = {
| "Connections"
| "Log Backends"
| "Notifications"
| "Feature Flags";
| "Feature Flags"
| "Permissions";
table:
| "teams"
| "incident_rules"
Expand All @@ -29,7 +30,8 @@ export type SchemaResourceType = {
| "connections"
| "logging_backends"
| "notifications"
| "properties";
| "properties"
| "permissions";
api: "incident-commander" | "canary-checker" | "config-db";
featureName: string;
resourceName: string;
Expand Down
3 changes: 2 additions & 1 deletion src/components/Settings/ResourceTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,8 @@ const permanentlyHiddenColumnsForTableMap: Record<
canaries: ["namespace"],
config_scrapers: ["schedule", "namespace"],
incident_rules: ["schedule", "namespace"],
teams: ["schedule", "namespace"]
teams: ["schedule", "namespace"],
permissions: ["schedule", "namespace"]
};

type ResourceTableProps = {
Expand Down

0 comments on commit c3e4eb5

Please sign in to comment.