enforces user admin role requirement for - creating / deleting / setting role for organization users - creating / deleting / setting role for project users - updating project name - deleting project hides action elements based on role for - admin console - team settings if team is only visible through project membership - add project tile if not team admin - project name text editor if not team / project admin - add redirect from team page if settings only visible through project membership - add redirect from admin console if not org admin role enforcement is handled on the api side through a custom GraphQL directive `hasRole`. on the client side, role information is fetched in the TopNavbar's `me` query and stored in the `UserContext`. there is a custom hook, `useCurrentUser`, that provides a user object with two functions, `isVisibile` & `isAdmin` which is used to check roles in order to render/hide relevant UI elements.
89 lines
1.1 KiB
TypeScript
89 lines
1.1 KiB
TypeScript
import gql from 'graphql-tag';
|
|
import TASK_FRAGMENT from './fragments/task';
|
|
|
|
const FIND_PROJECT_QUERY = gql`
|
|
query findProject($projectID: UUID!) {
|
|
findProject(input: { projectID: $projectID }) {
|
|
name
|
|
team {
|
|
id
|
|
}
|
|
members {
|
|
id
|
|
fullName
|
|
username
|
|
role {
|
|
code
|
|
name
|
|
}
|
|
profileIcon {
|
|
url
|
|
initials
|
|
bgColor
|
|
}
|
|
}
|
|
labels {
|
|
id
|
|
createdDate
|
|
name
|
|
labelColor {
|
|
id
|
|
name
|
|
colorHex
|
|
position
|
|
}
|
|
}
|
|
taskGroups {
|
|
id
|
|
name
|
|
position
|
|
tasks {
|
|
...TaskFields
|
|
}
|
|
}
|
|
}
|
|
labelColors {
|
|
id
|
|
position
|
|
colorHex
|
|
name
|
|
}
|
|
users {
|
|
id
|
|
email
|
|
fullName
|
|
username
|
|
role {
|
|
code
|
|
name
|
|
}
|
|
profileIcon {
|
|
url
|
|
initials
|
|
bgColor
|
|
}
|
|
owned {
|
|
teams {
|
|
id
|
|
name
|
|
}
|
|
projects {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
member {
|
|
teams {
|
|
id
|
|
name
|
|
}
|
|
projects {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
${TASK_FRAGMENT}
|
|
}
|
|
`;
|