feat(rbac): added new permission check for workspace in frontend

This commit is contained in:
Akhil Mohan
2023-09-08 21:22:36 +05:30
parent 549121f44e
commit 6671699867
48 changed files with 3446 additions and 2804 deletions
@@ -16,6 +16,15 @@ export const ProjectPermissionProvider = ({ children }: Props): JSX.Element => {
const workspaceId = currentWorkspace?._id || "";
const { data: permission, isLoading } = useGetUserProjectPermissions({ workspaceId });
console.log(workspaceId);
if (!permission && currentWorkspace) {
return (
<div className="flex items-center justify-center w-screen h-screen bg-bunker-800">
Failed to load user permissions
</div>
);
}
if (isLoading && workspaceId) {
return (
<div className="flex items-center justify-center w-screen h-screen bg-bunker-800">
@@ -29,20 +38,8 @@ export const ProjectPermissionProvider = ({ children }: Props): JSX.Element => {
);
}
if (!permission && currentWorkspace) {
return (
<div className="flex items-center justify-center w-screen h-screen bg-bunker-800">
Failed to load user permissions
</div>
);
}
if (!permission) {
return <>children</>;
}
return (
<ProjectPermissionContext.Provider value={permission}>
<ProjectPermissionContext.Provider value={permission!}>
{children}
</ProjectPermissionContext.Provider>
);
@@ -1,3 +1,3 @@
export { ProjectPermissionProvider, useProjectPermission } from "./ProjectPermissionContext";
export type { ProjectPermissionSet, TProjectPermission } from "./types";
export { ProjectGeneralPermissionActions, ProjectPermissionSubjects } from "./types";
export { ProjectPermissionActions,ProjectPermissionSub } from "./types";
@@ -1,13 +1,13 @@
import { MongoAbility } from "@casl/ability";
import { ForcedSubject, MongoAbility } from "@casl/ability";
export enum ProjectGeneralPermissionActions {
export enum ProjectPermissionActions {
Read = "read",
Create = "create",
Edit = "edit",
Delete = "delete"
}
export enum ProjectPermissionSubjects {
export enum ProjectPermissionSub {
Role = "role",
Member = "member",
Settings = "settings",
@@ -21,24 +21,44 @@ export enum ProjectPermissionSubjects {
Workspace = "workspace",
Secrets = "secrets",
SecretImports = "secret-imports",
SecretRollback = "secret-rollback",
Folders = "folders"
}
type SubjectFields = {
environment: string;
secretPath?: string;
};
export type ProjectPermissionSet =
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Secrets]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Folders]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.SecretImports]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Role]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Tags]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Member]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Integrations]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Webhooks]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.AuditLogs]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Environments]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.IpAllowList]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.Settings]
| [ProjectGeneralPermissionActions, ProjectPermissionSubjects.ServiceTokens]
| [ProjectGeneralPermissionActions.Delete, ProjectPermissionSubjects.Workspace]
| [ProjectGeneralPermissionActions.Edit, ProjectPermissionSubjects.Workspace];
| [
ProjectPermissionActions,
ProjectPermissionSub.Secrets | (ForcedSubject<ProjectPermissionSub.Secrets> & SubjectFields)
]
| [
ProjectPermissionActions,
ProjectPermissionSub.Folders | (ForcedSubject<ProjectPermissionSub.Folders> & SubjectFields)
]
| [
ProjectPermissionActions,
(
| ProjectPermissionSub.SecretImports
| (ForcedSubject<ProjectPermissionSub.SecretImports> & SubjectFields)
)
]
| [ProjectPermissionActions, ProjectPermissionSub.Role]
| [ProjectPermissionActions, ProjectPermissionSub.Tags]
| [ProjectPermissionActions, ProjectPermissionSub.Member]
| [ProjectPermissionActions, ProjectPermissionSub.Integrations]
| [ProjectPermissionActions, ProjectPermissionSub.Webhooks]
| [ProjectPermissionActions, ProjectPermissionSub.AuditLogs]
| [ProjectPermissionActions, ProjectPermissionSub.Environments]
| [ProjectPermissionActions, ProjectPermissionSub.IpAllowList]
| [ProjectPermissionActions, ProjectPermissionSub.Settings]
| [ProjectPermissionActions, ProjectPermissionSub.ServiceTokens]
| [ProjectPermissionActions.Delete, ProjectPermissionSub.Workspace]
| [ProjectPermissionActions.Edit, ProjectPermissionSub.Workspace]
| [ProjectPermissionActions.Read, ProjectPermissionSub.SecretRollback]
| [ProjectPermissionActions.Create, ProjectPermissionSub.SecretRollback];
export type TProjectPermission = MongoAbility<ProjectPermissionSet>;
+3 -2
View File
@@ -7,10 +7,11 @@ export {
OrgPermissionSubjects,
useOrgPermission
} from "./OrgPermissionContext";
export type { TProjectPermission } from "./ProjectPermissionContext";
export {
ProjectGeneralPermissionActions,
ProjectPermissionActions,
ProjectPermissionProvider,
ProjectPermissionSubjects,
ProjectPermissionSub,
useProjectPermission
} from "./ProjectPermissionContext";
export { SubscriptionProvider, useSubscription } from "./SubscriptionContext";