feat: add an organization member permission level (#19953)

This commit is contained in:
ケイラ
2025-10-27 17:14:16 -06:00
committed by GitHub
parent c3cbd977f1
commit 4f7b279fd8
23 changed files with 612 additions and 305 deletions
+1
View File
@@ -199,6 +199,7 @@ export const createCustomRole = async (
},
],
user_permissions: [],
organization_member_permissions: [],
});
return role;
};
+10 -2
View File
@@ -1520,11 +1520,15 @@ export interface CustomRoleRequest {
readonly name: string;
readonly display_name: string;
readonly site_permissions: readonly Permission[];
readonly user_permissions: readonly Permission[];
/**
* OrganizationPermissions are specific to the organization the role belongs to.
*/
readonly organization_permissions: readonly Permission[];
readonly user_permissions: readonly Permission[];
/**
* OrganizationMemberPermissions are specific to the organization the role belongs to.
*/
readonly organization_member_permissions: readonly Permission[];
}
// From codersdk/deployment.go
@@ -4140,11 +4144,15 @@ export interface Role {
readonly organization_id?: string;
readonly display_name: string;
readonly site_permissions: readonly Permission[];
readonly user_permissions: readonly Permission[];
/**
* OrganizationPermissions are specific for the organization in the field 'OrganizationID' above.
*/
readonly organization_permissions: readonly Permission[];
readonly user_permissions: readonly Permission[];
/**
* OrganizationMemberPermissions are specific for the organization in the field 'OrganizationID' above.
*/
readonly organization_member_permissions: readonly Permission[];
}
// From codersdk/rbacroles.go
@@ -66,9 +66,11 @@ const CreateEditRolePageView: FC<CreateEditRolePageViewProps> = ({
initialValues: {
name: role?.name || "",
display_name: role?.display_name || "",
site_permissions: role?.site_permissions || [],
organization_permissions: role?.organization_permissions || [],
user_permissions: role?.user_permissions || [],
site_permissions: role?.site_permissions ?? [],
user_permissions: role?.user_permissions ?? [],
organization_permissions: role?.organization_permissions ?? [],
organization_member_permissions:
role?.organization_member_permissions ?? [],
},
validationSchema,
onSubmit,
@@ -197,8 +197,9 @@ export const MockRoles: (AssignableRoles | Role)[] = [
action: "stop",
},
],
organization_permissions: [],
user_permissions: [],
organization_permissions: [],
organization_member_permissions: [],
assignable: true,
built_in: true,
},
@@ -292,8 +293,9 @@ export const MockRoles: (AssignableRoles | Role)[] = [
action: "read",
},
],
organization_permissions: [],
user_permissions: [],
organization_permissions: [],
organization_member_permissions: [],
assignable: true,
built_in: true,
},
@@ -407,8 +409,9 @@ export const MockRoles: (AssignableRoles | Role)[] = [
action: "create",
},
],
organization_permissions: [],
user_permissions: [],
organization_permissions: [],
organization_member_permissions: [],
assignable: true,
built_in: true,
},
@@ -462,8 +465,9 @@ export const MockRoles: (AssignableRoles | Role)[] = [
action: "read",
},
],
organization_permissions: [],
user_permissions: [],
organization_permissions: [],
organization_member_permissions: [],
built_in: true,
},
];
+24 -13
View File
@@ -281,45 +281,50 @@ export const MockOwnerRole: TypesGen.Role = {
name: "owner",
display_name: "Owner",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: "",
organization_permissions: [],
organization_member_permissions: [],
};
export const MockUserAdminRole: TypesGen.Role = {
name: "user_admin",
display_name: "User Admin",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: "",
organization_permissions: [],
organization_member_permissions: [],
};
export const MockTemplateAdminRole: TypesGen.Role = {
name: "template_admin",
display_name: "Template Admin",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: "",
organization_permissions: [],
organization_member_permissions: [],
};
export const MockAuditorRole: TypesGen.Role = {
name: "auditor",
display_name: "Auditor",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: "",
organization_permissions: [],
organization_member_permissions: [],
};
export const MockWorkspaceCreationBanRole: TypesGen.Role = {
name: "organization-workspace-creation-ban",
display_name: "Organization Workspace Creation Ban",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: "",
organization_permissions: [],
organization_member_permissions: [],
};
export const MockMemberRole: TypesGen.SlimRole = {
@@ -331,27 +336,30 @@ export const MockOrganizationAdminRole: TypesGen.Role = {
name: "organization-admin",
display_name: "Organization Admin",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [],
organization_member_permissions: [],
};
export const MockOrganizationUserAdminRole: TypesGen.Role = {
name: "organization-user-admin",
display_name: "Organization User Admin",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [],
organization_member_permissions: [],
};
export const MockOrganizationTemplateAdminRole: TypesGen.Role = {
name: "organization-template-admin",
display_name: "Organization Template Admin",
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [],
organization_member_permissions: [],
};
export const MockOrganizationAuditorRole: TypesGen.AssignableRoles = {
@@ -360,18 +368,20 @@ export const MockOrganizationAuditorRole: TypesGen.AssignableRoles = {
assignable: true,
built_in: false,
site_permissions: [],
organization_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [],
organization_member_permissions: [],
};
export const MockRoleWithOrgPermissions: TypesGen.AssignableRoles = {
name: "my-role-1",
display_name: "My Role 1",
organization_id: MockOrganization.id,
assignable: true,
built_in: false,
site_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [
{
negate: false,
@@ -454,14 +464,15 @@ export const MockRoleWithOrgPermissions: TypesGen.AssignableRoles = {
action: "create",
},
],
user_permissions: [],
organization_member_permissions: [],
};
export const MockRole2WithOrgPermissions: TypesGen.Role = {
name: "my-role-1",
display_name: "My Role 1",
organization_id: MockOrganization.id,
site_permissions: [],
user_permissions: [],
organization_id: MockOrganization.id,
organization_permissions: [
{
negate: false,
@@ -469,7 +480,7 @@ export const MockRole2WithOrgPermissions: TypesGen.Role = {
action: "create",
},
],
user_permissions: [],
organization_member_permissions: [],
};
// assignableRole takes a role and a boolean. The boolean implies if the