12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import {useMemo} from 'react';
- import type {Organization} from 'sentry/types/organization';
- import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser';
- import useOrganization from 'sentry/utils/useOrganization';
- function hasOrganizationRole(organization: Organization, roleRequired: string): boolean {
- if (!Array.isArray(organization.orgRoleList)) {
- return false;
- }
- const roleIds = organization.orgRoleList.map(r => r.id);
- const requiredIndex = roleIds.indexOf(roleRequired);
- const currentIndex = roleIds.indexOf(organization.orgRole ?? '');
- if (requiredIndex === -1 || currentIndex === -1) {
- return false;
- }
-
- return currentIndex >= requiredIndex;
- }
- interface UseRoleOptions {
-
- role:
- Extract<keyof Organization, 'debugFilesRole' | 'attachmentsRole'>;
- }
- interface UseRoleResult {
- hasRole: boolean;
-
- roleRequired: string;
- }
- export function useRole(options: UseRoleOptions): UseRoleResult {
- const organization = useOrganization();
- return useMemo((): UseRoleResult => {
- const roleRequired = organization[options.role];
- if (isActiveSuperuser()) {
- return {hasRole: true, roleRequired};
- }
- const hasRole = hasOrganizationRole(organization, roleRequired);
- return {hasRole, roleRequired};
- }, [organization, options.role]);
- }
|