From 6ee2e1346949bee6446535c1c7d2bc3be46fc03b Mon Sep 17 00:00:00 2001 From: maxceem Date: Tue, 20 Oct 2020 17:35:07 +0300 Subject: [PATCH 1/8] feat: improved permissions docs and method Make it same like on Project Service ref issue #2841 --- docs/permissions.html | 654 ++++++++++++++++++--------- scripts/permissions-doc/index.js | 18 +- scripts/permissions-doc/template.hbs | 94 +++- src/config/permissions.js | 46 +- src/helpers/permissions.js | 2 +- 5 files changed, 546 insertions(+), 268 deletions(-) diff --git a/docs/permissions.html b/docs/permissions.html index 65e337cbd..26fddfe8b 100644 --- a/docs/permissions.html +++ b/docs/permissions.html @@ -10,6 +10,45 @@ font-size: 62.5%; line-height: 120%; } + + .permission-variable { + line-height: 80%; + margin: 5px 0; + word-break: break-word; + } + + .permission-title { + line-height: 120%; + margin: 5px 0; + } + + .anchor-container .anchor { + float: left; + opacity: 1; + line-height: 1; + margin-left: -20px; + } + + .anchor-container .anchor::before { + visibility: hidden; + font-size: 16px; + content: '🔗'; + display: inline-block; + width: 20px; + } + + .anchor-container:hover .anchor { + text-decoration: none; + } + + .anchor-container:hover .anchor::before { + visibility: visible; + } + + .badge-crossed { + opacity: 0.4; + text-decoration: line-through; + } @@ -21,421 +60,598 @@

Permissions

Legend:

-

Project Plan

+

+ Project Plan +

- Manage project plan -
MANAGE_PROJECT_PLAN
+
+ Manage project plan +
+
MANAGE_PROJECT_PLAN
Create, edit and delete phases and milestones.
- manager - project_manager - program_manager - solution_architect - copilot - administrator - Connect Admin +
+ manager + project_manager + program_manager + solution_architect + copilot +
+ +
+ administrator + Connect Admin +
- Manage asset libraries files and links -
MANAGE_NOT_OWN_ATTACHEMENT
+
+ Manage asset libraries files and links +
+
MANAGE_NOT_OWN_ATTACHEMENT
- administrator - Connect Admin +
+
+ +
+ administrator + Connect Admin +
- Manage completed phases -
MANAGE_COMPLETED_PHASE
+
+ Manage completed phases +
+
MANAGE_COMPLETED_PHASE
- administrator - Connect Admin +
+
+ +
+ administrator + Connect Admin +
-

Project Members

+

+ Project Members +

- Manage topcoder team -
MANAGE_TOPCODER_TEAM
+
+ Manage topcoder team +
+
MANAGE_TOPCODER_TEAM
Invite new members or delete them. There are some additional restrictions for some roles.
- manager - account_manager - account_executive - project_manager - program_manager - solution_architect - administrator - Connect Admin +
+ manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+ administrator + Connect Admin +
- Join topcoder team -
JOIN_TOPCODER_TEAM
+
+ Join topcoder team +
+
JOIN_TOPCODER_TEAM
Join Topcoder Team without invitation
- administrator - Connect Admin - Connect Manager +
+
+ +
+ administrator + Connect Admin + Connect Manager +
- Manage copilots -
MANAGE_COPILOTS
+
+ Manage copilots +
+
MANAGE_COPILOTS
Directly invite copilots to the project.
- administrator - Connect Admin - Connect Copilot Manager +
+
+ +
+ administrator + Connect Admin + Connect Copilot Manager +
- Request copilots -
REQUEST_COPILOTS
+
+ Request copilots +
+
REQUEST_COPILOTS
Request copilots to the project.
- manager - account_manager - account_executive - project_manager - program_manager - solution_architect - administrator - Connect Admin - Connect Copilot Manager +
+ manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+ administrator + Connect Admin + Connect Copilot Manager +
-

Topics & Posts

+

+ Topics & Posts +

- Access private posts -
ACCESS_PRIVATE_POST
+
+ Access private posts +
+
ACCESS_PRIVATE_POST
- copilot - administrator - Connect Admin - Connect Manager - Program Manager - Solution Architect - Project Manager +
+ copilot +
+ +
+ administrator + Connect Admin + Connect Manager + Program Manager + Solution Architect + Project Manager +
-

Budget & Invoice Reports

+

+ Budget & Invoice Reports +

- Access budget report -
ACCESS_BUDGET_REPORT
+
+ Access budget report +
+
ACCESS_BUDGET_REPORT
- customer - manager - account_manager - account_executive - project_manager - program_manager - solution_architect - administrator - Connect Admin +
+ customer + manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+ administrator + Connect Admin +
- Access budget spent report -
ACCESS_BUDGET_SPENT_REPORT
+
+ Access budget spent report +
+
ACCESS_BUDGET_SPENT_REPORT
- manager - account_manager - account_executive - project_manager - program_manager - solution_architect - administrator - Connect Admin +
+ manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+ administrator + Connect Admin +
- Access invoice report -
ACCESS_INVOICE_REPORT
+
+ Access invoice report +
+
ACCESS_INVOICE_REPORT
- customer - manager - account_manager - account_executive - project_manager - program_manager - solution_architect - administrator - Connect Admin +
+ customer + manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+ administrator + Connect Admin +
-

User Profile

+

+ User Profile +

- Update phone number in user profile -
UPDATE_USER_PROFILE_PHONE
+
+ Update phone number in user profile +
+
UPDATE_USER_PROFILE_PHONE
- Topcoder User - administrator - Connect Admin - Connect Manager - Connect Copilot Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager - Connect Copilot +
+
+ +
+ Topcoder User + administrator + Connect Admin + Connect Manager + Connect Copilot Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager + Connect Copilot +
- Update company name in user profile -
UPDATE_USER_PROFILE_COMPANY
+
+ Update company name in user profile +
+
UPDATE_USER_PROFILE_COMPANY
- administrator - Connect Admin - Connect Manager - Connect Copilot Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager +
+
+ +
+ administrator + Connect Admin + Connect Manager + Connect Copilot Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
- View User Profile as Copilot -
VIEW_USER_PROFILE_AS_COPILOT
+
+ View User Profile as Copilot +
+
VIEW_USER_PROFILE_AS_COPILOT
- Connect Copilot +
+
+ +
+ Connect Copilot +
- View User Profile as Topcoder Employee -
VIEW_USER_PROFILE_AS_TOPCODER_EMPLOYEE
+
+ View User Profile as Topcoder Employee +
+
VIEW_USER_PROFILE_AS_TOPCODER_EMPLOYEE
- administrator - Connect Admin - Connect Manager - Connect Copilot Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager +
+
+ +
+ administrator + Connect Admin + Connect Manager + Connect Copilot Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
- View User Profile as Customer -
VIEW_USER_PROFILE_AS_CUSTOMER
+
+ View User Profile as Customer +
+
VIEW_USER_PROFILE_AS_CUSTOMER
- Topcoder User - administrator - Connect Admin - Connect Manager - Connect Copilot Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager - Connect Copilot +
+
+ +
+ Topcoder User + administrator + Connect Admin + Connect Manager + Connect Copilot Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager + Connect Copilot +
-

View Member Suggestions

+

+ View Member Suggestions +

- Member Suggestions -
SEE_MEMBER_SUGGESTIONS
+
+ Member Suggestions +
+
SEE_MEMBER_SUGGESTIONS
- administrator - Connect Admin - Connect Manager - Connect Account Manager - Connect Copilot Manager +
+
+ +
+ administrator + Connect Admin + Connect Manager + Connect Account Manager + Connect Copilot Manager +
-

My Projects Filter

+

+ My Projects Filter +

- My Projects Filter -
SEE_MY_PROJECTS_FILTER
+
+ My Projects Filter +
+
SEE_MY_PROJECTS_FILTER
- administrator - Connect Admin - Connect Manager - Connect Copilot Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager +
+
+ +
+ administrator + Connect Admin + Connect Manager + Connect Copilot Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager +
-

DEMO/TEST example permissions

+

+ DEMO/TEST example permissions +

- Topcoder role deny -
TEST_1
+
+ Topcoder role deny +
+
TEST_1
This permission is just to demonstrate possible format
- Connect Copilot - Topcoder User - Account Executive +
+
+ +
+ Connect Copilot + Topcoder User + Account Executive +
- Topcoder role and Project role deny -
TEST_2
+
+ Topcoder role and Project role deny +
+
TEST_2
This permission is just to demonstrate possible format
- copilot - customer - manager - Connect Copilot - Topcoder User - Account Executive +
+ copilot + customer + manager +
+ +
+ Connect Copilot + Topcoder User + Account Executive +
- Any Project Member -
TEST_3
+
+ Any Project Member +
+
TEST_3
This permission is just to demonstrate possible format
- customer - copilot - manager - account_manager - account_executive - project_manager - program_manager - solution_architect +
+ customer + copilot + manager + account_manager + account_executive + project_manager + program_manager + solution_architect +
+ +
+
- Any Logged-in User -
TEST_5
+
+ Any Logged-in User +
+
TEST_5
This permission is just to demonstrate possible format
- Topcoder User - administrator - Connect Admin - Connect Manager - Connect Account Manager - Business Development Representative - Presales - Account Executive - Program Manager - Solution Architect - Project Manager - Connect Copilot +
+
+ +
+ Topcoder User + administrator + Connect Admin + Connect Manager + Connect Account Manager + Business Development Representative + Presales + Account Executive + Program Manager + Solution Architect + Project Manager + Connect Copilot +
- Owner Project role -
TEST_4
+
+ Owner Project role +
+
TEST_4
This permission is just to demonstrate possible format
- owner +
+ owner +
+ +
+
- \ No newline at end of file + diff --git a/scripts/permissions-doc/index.js b/scripts/permissions-doc/index.js index 51e43bd20..e13139ae4 100644 --- a/scripts/permissions-doc/index.js +++ b/scripts/permissions-doc/index.js @@ -42,6 +42,8 @@ import { const docTemplatePath = path.resolve(__dirname, './template.hbs') const outputDocPath = path.resolve(__dirname, '../../docs/permissions.html') +handlebars.registerHelper('istrue', value => value === true) + /** * All Project Roles */ @@ -121,8 +123,8 @@ function normalizePermission(permission) { if (!normalizedPermission.allowRule) { normalizedPermission = { - _meta: permission._meta, - allowRule: _.omit(permission, '_meta') + meta: permission.meta, + allowRule: _.omit(permission, 'meta') } } @@ -143,13 +145,17 @@ const renderDocument = handlebars.compile(templateStr) const permissionKeys = _.keys(PERMISSIONS) const permissions = permissionKeys.map((key) => ({ ...PERMISSIONS[key], - _meta: { - ...PERMISSIONS[key]._meta, + meta: { + ...PERMISSIONS[key].meta, key, } })) -const groupsObj = _.groupBy(permissions, '_meta.group') -const groups = _.toPairs(groupsObj).map(([title, permissions]) => ({ title, permissions })) +const groupsObj = _.groupBy(permissions, 'meta.group') +const groups = _.toPairs(groupsObj).map(([title, permissions]) => ({ + title, + permissions, + anchor: `section-${title.toLowerCase().replace(/\s+/g, '-')}`, +})) groups.forEach((group) => { group.permissions = group.permissions.map(normalizePermission) diff --git a/scripts/permissions-doc/template.hbs b/scripts/permissions-doc/template.hbs index facd79bc7..884575f99 100644 --- a/scripts/permissions-doc/template.hbs +++ b/scripts/permissions-doc/template.hbs @@ -10,6 +10,45 @@ font-size: 62.5%; line-height: 120%; } + + .permission-variable { + line-height: 80%; + margin: 5px 0; + word-break: break-word; + } + + .permission-title { + line-height: 120%; + margin: 5px 0; + } + + .anchor-container .anchor { + float: left; + opacity: 1; + line-height: 1; + margin-left: -20px; + } + + .anchor-container .anchor::before { + visibility: hidden; + font-size: 16px; + content: '🔗'; + display: inline-block; + width: 20px; + } + + .anchor-container:hover .anchor { + text-decoration: none; + } + + .anchor-container:hover .anchor::before { + visibility: visible; + } + + .badge-crossed { + opacity: 0.4; + text-decoration: line-through; + } @@ -21,42 +60,59 @@

Legend:

{{#each groups}}
-

{{title}}

+

+ {{title}} +

{{#each permissions}}
- {{_meta.title}} -
{{_meta.key}}
-
{{_meta.description}}
+
+ {{meta.title}} +
+
{{meta.key}}
+
{{meta.description}}
- {{#each allowRule.projectRoles}} - {{this}} - {{/each}} - {{#each denyRule.projectRoles}} - {{this}} - {{/each}} - {{#each allowRule.topcoderRoles}} - {{this}} - {{/each}} - {{#each denyRule.topcoderRoles}} - {{this}} - {{/each}} +
+ {{#if (istrue allowRule.projectRoles)}} + Any Project Member + {{else}} + {{#each allowRule.projectRoles}} + {{this}} + {{/each}} + {{/if}} + {{#each denyRule.projectRoles}} + {{this}} + {{/each}} +
+ +
+ {{#if (istrue allowRule.topcoderRoles)}} + Any Logged-in User + {{else}} + {{#each allowRule.topcoderRoles}} + {{this}} + {{/each}} + {{/if}} + {{#each denyRule.topcoderRoles}} + {{this}} + {{/each}} +
{{/each}} {{/each}} - \ No newline at end of file + diff --git a/src/config/permissions.js b/src/config/permissions.js index c5857f609..959fcf8c7 100644 --- a/src/config/permissions.js +++ b/src/config/permissions.js @@ -145,7 +145,7 @@ const PROJECT_ALL = [ export default { MANAGE_PROJECT_PLAN: { - _meta: { + meta: { group: 'Project Plan', title: 'Manage project plan', description: 'Create, edit and delete phases and milestones.', @@ -163,7 +163,7 @@ export default { }, MANAGE_NOT_OWN_ATTACHEMENT: { - _meta: { + meta: { group: 'Project Plan', title: 'Manage asset libraries files and links', }, @@ -173,7 +173,7 @@ export default { }, MANAGE_COMPLETED_PHASE: { - _meta: { + meta: { group: 'Project Plan', title: 'Manage completed phases', }, @@ -183,7 +183,7 @@ export default { }, MANAGE_TOPCODER_TEAM: { - _meta: { + meta: { group: 'Project Members', title: 'Manage topcoder team', description: 'Invite new members or delete them. There are some additional restrictions for some roles.', @@ -197,7 +197,7 @@ export default { }, JOIN_TOPCODER_TEAM: { - _meta: { + meta: { group: 'Project Members', title: 'Join topcoder team', description: 'Join Topcoder Team without invitation', @@ -209,7 +209,7 @@ export default { }, MANAGE_COPILOTS: { - _meta: { + meta: { group: 'Project Members', title: 'Manage copilots', description: 'Directly invite copilots to the project.', @@ -221,7 +221,7 @@ export default { }, REQUEST_COPILOTS: { - _meta: { + meta: { group: 'Project Members', title: 'Request copilots', description: 'Request copilots to the project.', @@ -236,7 +236,7 @@ export default { }, ACCESS_PRIVATE_POST: { - _meta: { + meta: { group: 'Topics & Posts', title: 'Access private posts', }, @@ -249,7 +249,7 @@ export default { }, ACCESS_BUDGET_REPORT: { - _meta: { + meta: { group: 'Budget & Invoice Reports', title: 'Access budget report', }, @@ -268,7 +268,7 @@ export default { }, ACCESS_BUDGET_SPENT_REPORT: { - _meta: { + meta: { group: 'Budget & Invoice Reports', title: 'Access budget spent report', }, @@ -286,7 +286,7 @@ export default { }, ACCESS_INVOICE_REPORT: { - _meta: { + meta: { group: 'Budget & Invoice Reports', title: 'Access invoice report', }, @@ -305,7 +305,7 @@ export default { }, UPDATE_USER_PROFILE_PHONE: { - _meta: { + meta: { group: 'User Profile', title: 'Update phone number in user profile', }, @@ -322,7 +322,7 @@ export default { }, UPDATE_USER_PROFILE_COMPANY: { - _meta: { + meta: { group: 'User Profile', title: 'Update company name in user profile', }, @@ -332,7 +332,7 @@ export default { }, VIEW_USER_PROFILE_AS_COPILOT: { - _meta: { + meta: { group: 'User Profile', title: 'View User Profile as Copilot', }, @@ -342,7 +342,7 @@ export default { }, VIEW_USER_PROFILE_AS_TOPCODER_EMPLOYEE: { - _meta: { + meta: { group: 'User Profile', title: 'View User Profile as Topcoder Employee', }, @@ -352,7 +352,7 @@ export default { }, VIEW_USER_PROFILE_AS_CUSTOMER: { - _meta: { + meta: { group: 'User Profile', title: 'View User Profile as Customer', }, @@ -369,7 +369,7 @@ export default { }, SEE_MEMBER_SUGGESTIONS: { - _meta: { + meta: { group: 'View Member Suggestions', title: 'Member Suggestions' }, @@ -383,7 +383,7 @@ export default { }, SEE_MY_PROJECTS_FILTER: { - _meta: { + meta: { group: 'My Projects Filter', title: 'My Projects Filter', }, @@ -398,7 +398,7 @@ export default { Rules below just to demonstrate possible rules format */ TEST_1: { - _meta: { + meta: { group: 'DEMO/TEST example permissions', title: 'Topcoder role deny', description: 'This permission is just to demonstrate possible format', @@ -417,7 +417,7 @@ export default { }, TEST_2: { - _meta: { + meta: { group: 'DEMO/TEST example permissions', title: 'Topcoder role and Project role deny', description: 'This permission is just to demonstrate possible format', @@ -443,7 +443,7 @@ export default { }, TEST_3: { - _meta: { + meta: { group: 'DEMO/TEST example permissions', title: 'Any Project Member', description: 'This permission is just to demonstrate possible format', @@ -452,7 +452,7 @@ export default { }, TEST_5: { - _meta: { + meta: { group: 'DEMO/TEST example permissions', title: 'Any Logged-in User', description: 'This permission is just to demonstrate possible format', @@ -461,7 +461,7 @@ export default { }, TEST_4: { - _meta: { + meta: { group: 'DEMO/TEST example permissions', title: 'Owner Project role', description: 'This permission is just to demonstrate possible format', diff --git a/src/helpers/permissions.js b/src/helpers/permissions.js index 5396ca918..2a97d4294 100644 --- a/src/helpers/permissions.js +++ b/src/helpers/permissions.js @@ -212,7 +212,7 @@ const matchPermissionRule = (permissionRule, user, project) => { _.get(user, 'roles', []).map(role => role.toLowerCase()), permissionRule.topcoderRoles.map(role => role.toLowerCase()) ).length > 0 - } else if (permissionRule.topcoderRoles === 'true') { + } else if (permissionRule.topcoderRoles === true) { // `topcoderRoles === true` means that we check if user is has any Topcoder role // basically this equals to logged-in user, as all the Topcoder users // have at least one role `Topcoder User` From 37ee429caa54b1a8e5d17ca91d0991bf34fe15fe Mon Sep 17 00:00:00 2001 From: maxceem Date: Fri, 23 Oct 2020 12:18:54 +0300 Subject: [PATCH 2/8] refactor: move all permissions in one place ref issue #2841 --- docs/permissions-guide/permissions-guide.md | 13 +- docs/permissions.html | 657 ++++++++++++++++-- scripts/permissions-doc/index.js | 2 +- scripts/permissions-doc/template.hbs | 4 + .../AssetsLibrary/FilesGridView.jsx | 2 +- .../AssetsLibrary/LinksGridView.jsx | 2 +- src/components/Feed/Feed.jsx | 6 +- .../IncompleteUserProfileDialog.jsx | 1 - .../IncompleteUserProfile.jsx | 11 +- src/components/Posts/PostsContainer.jsx | 6 +- src/components/ProjectInfo/ProjectInfo.jsx | 14 +- .../TeamManagement/CopilotManagementDialog.js | 66 +- .../TeamManagement/ProjectManagementDialog.js | 67 +- .../TeamManagement/TeamManagement.jsx | 34 +- .../TeamManagement/TeamManagement.scss | 6 +- .../TopcoderManagementDialog.js | 27 +- src/components/TopBar/ProjectToolBar.js | 1 - src/components/TopBar/ProjectsToolBar.js | 8 +- src/components/TopBar/TopBarContainer.js | 43 +- src/components/TopicDrawer/TopicDrawer.jsx | 4 - src/config/permissions.js | 475 +++++++++++-- src/helpers/permissions.js | 121 +--- src/helpers/projectHelper.js | 17 +- src/helpers/tcHelpers.js | 6 +- src/projects/actions/loadProjects.js | 6 +- .../components/projectsCard/ProjectCard.jsx | 4 - .../projectsCard/ProjectCardBody.jsx | 20 +- .../create/components/FillProjectDetails.js | 31 - .../create/components/UpdateUserInfo.js | 7 +- src/projects/detail/Messages.jsx | 3 +- src/projects/detail/ProjectDetail.jsx | 42 +- .../detail/components/FileListContainer.jsx | 7 - .../components/PhaseCard/EditStageForm.jsx | 28 +- .../detail/components/PhaseCard/PhaseCard.jsx | 2 +- .../ProjectPlanEmpty/ProjectPlanEmpty.jsx | 9 +- .../ProjectScopeDrawer/ProjectScopeDrawer.jsx | 8 +- .../detail/components/ProjectSpecSidebar.jsx | 10 +- .../detail/components/ProjectStage.jsx | 15 +- .../ProjectStageTabs/ProjectStageTabs.jsx | 6 +- .../detail/components/ProjectStages.jsx | 9 - .../ProjectBudgetReport.jsx | 2 +- .../ProjectSummaryReport.jsx | 2 +- .../ScopeChangeRequest/ScopeChangeRequest.jsx | 21 +- .../timeline/Milestone/Milestone.jsx | 10 +- .../MilestoneTypeAddLinks.jsx | 21 +- .../MilestoneTypeCheckpointReview.jsx | 18 +- .../MilestoneTypeDelivery.jsx | 23 +- .../MilestoneTypeFinalDesigns.jsx | 18 +- .../MilestoneTypeFinalFixes.jsx | 8 +- .../MilestoneTypePhaseSpecification.jsx | 18 +- .../MilestoneTypeProgress.jsx | 16 +- .../detail/containers/AssetsInfoContainer.jsx | 16 +- .../containers/AssetsLibraryContainer.jsx | 16 +- .../detail/containers/DashboardContainer.jsx | 28 +- .../detail/containers/FeedContainer.js | 13 +- .../detail/containers/MessagesContainer.js | 16 +- .../containers/MessagesTabContainer.jsx | 12 +- .../containers/ProductTimelineContainer.jsx | 45 +- .../detail/containers/ProjectFAQContainer.jsx | 10 +- .../detail/containers/ProjectInfoContainer.js | 37 +- .../ProjectSummaryReportContainer.jsx | 11 +- .../ScopeAndSpecificationContainer.jsx | 34 +- .../containers/TeamManagementContainer.jsx | 98 +-- .../Projects/ProjectListNavHeader.jsx | 7 +- .../list/components/Projects/Projects.jsx | 20 +- .../components/Projects/ProjectsGridView.jsx | 18 +- .../metadata/components/MetaDataPanel.jsx | 8 +- .../metadata/containers/FormDetails.jsx | 28 +- .../metadata/containers/FormsContainer.jsx | 29 +- .../metadata/containers/MetaDataContainer.jsx | 20 +- .../containers/MilestoneTemplateDetails.jsx | 24 +- .../MilestoneTemplatesContainer.jsx | 31 +- .../metadata/containers/PlanConfigDetails.jsx | 28 +- .../containers/PlanConfigsContainer.jsx | 29 +- .../containers/PriceConfigDetails.jsx | 28 +- .../containers/PriceConfigsContainer.jsx | 29 +- .../containers/ProductCategoriesContainer.jsx | 29 +- .../containers/ProductCategoryDetails.jsx | 26 +- .../containers/ProductTemplateDetails.jsx | 28 +- .../containers/ProductTemplatesContainer.jsx | 29 +- .../containers/ProjectTemplateDetails.jsx | 30 +- .../containers/ProjectTemplatesContainer.jsx | 29 +- .../containers/ProjectTypeDetails.jsx | 26 +- .../containers/ProjectTypesContainer.jsx | 29 +- .../components/NotificationSettingsForm.jsx | 7 +- .../NotificationSettingsContainer.jsx | 18 +- .../components/ProfileSettingsForm.jsx | 2 +- .../system/components/ChangeEmailForm.jsx | 7 +- .../system/components/SystemSettingsForm.jsx | 5 +- .../containers/SystemSettingsContainer.jsx | 15 +- 90 files changed, 1528 insertions(+), 1344 deletions(-) diff --git a/docs/permissions-guide/permissions-guide.md b/docs/permissions-guide/permissions-guide.md index cb4134694..b6d53a136 100644 --- a/docs/permissions-guide/permissions-guide.md +++ b/docs/permissions-guide/permissions-guide.md @@ -18,12 +18,12 @@ Let's say you would like to add a new place in code where you want to check user 2. After you add a new permission, regenerate [permissions list](https://htmlpreview.github.io/?https://github.com/appirio-tech/connect-app/blob/dev/docs/permissions.html) by running `npm run generate:doc:permissions`. -3. To check if user has permission in code use method `hasPermission(permission)`. +3. To check if logged-in user has permission in code use method `hasPermission(permission)`. Example:
- + ```js - import PERMISSIONS from 'config/permissions' + import { PERMISSIONS } from 'config/permissions' import { hasPermission } from 'helpers/permissions' if (hasPermission(PERMISSIONS.MANAGE_PROJECT_PLAN)) { @@ -31,7 +31,10 @@ Let's say you would like to add a new place in code where you want to check user } ``` - - Note, optionally, you may pass the `project` object like this `hasPermission(permission, project)`. But you don't have to as `hasPermission` gets `project` object from the Redux Store (`projectState.project`) automatically. Only in case if you want to check user permission to another project which is not loaded into the Redux Store then you may pass `project` explicitly. +4. If you would like to check permissions for other user (not the current user) or for other project (not the current project) you may pass the second argument `entities: { project?: object, user?: object }`: + - `hasPermission(permission, { project })` - check permissions for another project + - `hasPermission(permission, { user })` - check permissions for another user + - `hasPermission(permission, { project, user })` - check permissions for another project and user ## Roles @@ -49,4 +52,4 @@ By default every user has one role `Topcoder User`, generally this means that su When user joins some project and become a member of the project, such a user has one **Project Role** inside that project. One user may have different **Project Role** in different projects. See [the list of all Project Roles](https://github.com/appirio-tech/connect-app/blob/dev/src/config/constants.js#L638-L647) which we use in Connect App. - \ No newline at end of file + diff --git a/docs/permissions.html b/docs/permissions.html index 26fddfe8b..255599f32 100644 --- a/docs/permissions.html +++ b/docs/permissions.html @@ -6,6 +6,10 @@ Permissions