{"version":3,"sources":["webpack:///./node_modules/reactstrap/es/FormGroup.js","webpack:///./app/components/RolesDisplay/FriendlyScope.js","webpack:///./app/components/RolesDisplay/index.js","webpack:///./node_modules/reactstrap/es/Form.js","webpack:///./app/components/ScopeAssignmentForm/messages.js","webpack:///./app/components/ScopeAssignmentForm/index.js","webpack:///./app/containers/RoleDetails/messages.js","webpack:///./app/containers/RoleDetails/RolePermissions.js","webpack:///./app/containers/RoleDetails/AssignRoleToUserModal.js","webpack:///./app/containers/RoleDetails/RoleUsers.js","webpack:///./app/containers/RoleDetails/RoleDetails.js","webpack:///./app/containers/RoleDetails/constants.js","webpack:///./app/containers/RoleDetails/actions.js","webpack:///./app/containers/RoleDetails/reducers.js","webpack:///./app/containers/RoleDetails/selectors.js","webpack:///./app/containers/RoleDetails/sagas.js","webpack:///./app/containers/RoleDetails/index.js"],"names":["propTypes","children","node","row","bool","check","inline","disabled","tag","className","string","cssModule","object","FormGroup","props","Tag","attributes","classes","createElement","defaultProps","FriendlyScope","scope","roles","swimlanes","roleSrn","includes","role","get","List","find","style","fontStyle","isPlatformRole","swimlane","TextLink","color","to","pathname","search","qs","stringify","srn","RolesDisplay","data","removeRole","Table","marginBottom","borderTop","map","index","title","onClick","undefined","innerRef","oneOfType","func","Form","_Component","_this","call","this","getRef","bind","submit","_proto","prototype","ref","render","_this$props","defineMessages","SelectAllSwimlanes","id","defaultMessage","SelectAllSwimlaneMessage","ScopeLabel","ScopeAssignmentForm","scopeInputValue","platformPerm","handleScopeInputChange","handlePlatformPermClick","canSelectAllSwimlanes","isDisabled","scopeOptions","toList","sortBy","toJS","value","resourceId","label","FormLabel","required","margin","messages","Select","menuPlacement","isClearable","isMulti","options","onChange","checked","newVal","Tooltip","anchor","Icon","fontSize","fa","name","tooltipContent","assignToUser","assignRoleToUser","assignmentFormError","assignmentFormSubmitError","cancel","createRole","description","errorOccurred","forSwimlanePermissions","numberOfUsers","permissions","platformPerms","roleDetails","save","selectAllSwimlanes","selectAllSwimlanesMessage","selectAll","unassign","unassignRole","unselectAll","user","users","usersAssignmentPreamble","permissionTypeName_sonrai","permissionTypeName_swimlane","permissionTypeDescription_sonrai","permissionTypeDescription_swimlane","EmptyText","RolePermissions","sort","reduce","groupedPerms","perm","SWIMLANE_SCOPED_PERMISSIONS","push","sonrai","sectionKey","permissionsWithColumns","permission","action","customColumnConfig","width","cellRendererFramework","params","DynamicFormattedMessage","flex","editMode","allow","key","styles","sectionContent","element","sectionRefs","sectionContentHeaderContainer","sectionContentHeaderControls","sectionContentControlsLink","length","DataTable","noTableActions","autosize","customGridProps","domLayout","paddingTop","gridTemplateColumns","display","textAlign","marginLeft","groupedPermissions","getPermissionsGrouped","Object","keys","renderSectionContent","container","sectionContentContainer","Component","initialState","assignmentModalOpen","assignmentFormValue","fromJS","userSrn","scopes","platform","SquareLoadingAnimation","spin","AssignRoleToUserModal","setState","assignUserToRoleErrorClear","oldState","set","state","hasSwimlanePerms","hasSwimlaneScopedPermissions","userOrg","getCurrentOrg","specialOrgScope","scopeSRNs","filter","_","isEmpty","assignUserToRole","scopeAssignmentIndex","getIn","forEach","assignment","userId","Set","add","prevProps","roleAssignment","closeAssignmentModal","usersloading","constructScopeAssignmentIndex","hasNonSwimlanePerms","hasNonSwimlaneScopedPermissions","swimlaneResourceIds","values","userOptions","allUsers","userAssignments","userAssignedToOrg","swimlaneAssignments","has","size","filteredSwimlanes","Map","userScopes","swimlaneResourceId","console","warn","userHasSpecialOrgScope","currentUser","for","handleUserAssignSelect","handleScopeAssignSelect","handleAssignForPlatform","Button","openAssignmentModal","Modal","isOpen","ModalHeader","ModalBody","renderModalBody","ModalFooter","handleAssignRoleToUser","paddingLeft","RoleUsers","api","gridAPI","newRows","getSelectedRows","unsavedRoleUnassignments","unassignUsersFromRole","assignmentSrns","topPartContainer","WithPermission","permissionName","userData","userHasPermission","tableData","stripTags","email","cantUnassignAnyUsers","bulkActions","handleUnassignUsers","tableContainerStyle","hasCheckBoxes","bulkActionWorking","roleUnassignment","checkboxSelectedRows","onLoad","selectionChanged","handleUserUnassignSelect","onClickNodeView","handleUserNav","hide","checkboxSelection","checkboxRowTest","selectAllCheckbox","React","createRef","height","gridTemplateRows","unassignRoleContainer","background","zIndex","unassignRollToolbar","position","bottom","deselectAll","renderTopPart","renderTable","permissionChecker","TAB_PERMS","TABS","RoleDetails","tabIndex","activeTab","breadcrumbs","Breadcrumb","BorderedCard","headerContainer","SectionHeader","NodeViewTabs","minHeight","tabStyle","tabContent","body","bodyCard","padding","fontWeight","borderLeft","borderRight","borderBottom","renderNavContext","renderHeader","renderBody","Helmet","getNameForHelmet","PREFIX","ASSIGN_USER_TO_ROLE","UNASSIGN_USERS_FROM_ROLE","createAction","assignUserToRoleSuccess","assignUserToRoleError","unassignUsersFromRoleSuccess","unassignUsersFromRoleError","loading","errorLoading","saving","errorSaving","edittingRole","inProgress","error","roleDetailsReducer","handleActions","payload","setIn","selectRoleDetailsDomain","selectRoleAssignment","createSelector","selectRoleUnassignment","selectRole","selectAllRoles","parse","roleId","sonraiRoles","roleDetailsSaga","deleters","assignmentSrn","getClient","client","mutate","variables","mutation","gql","put","assignments","result","all","takeLatest","RoleDetailsPage","context","overflow","mapStateToProps","createStructuredSelector","selectSonraiUserSrn","selectSonraiUsers","selectSonraiUsersLoading","selectSwimlanes","withConnect","connect","dispatch","bindActionCreators","withReducer","injectReducer","reducer","withSaga","injectSaga","saga","sagas","mode","DAEMON","compose"],"mappings":"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","file":"31.70b0b98e625e657207e7.chunk.js","sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n inline: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'div'\n};\n\nvar FormGroup = function FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"tag\"]);\n\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, check ? 'form-check' : 'form-group', check && inline ? 'form-check-inline' : false, check && disabled ? 'disabled' : false), cssModule);\n\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormGroup.propTypes = propTypes;\nFormGroup.defaultProps = defaultProps;\nexport default FormGroup;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport qs from 'query-string'\n\nimport TextLink from 'components/TextLink'\nimport { isPlatformRole } from 'utils/sonraiUtils'\n\nconst FriendlyScope = ({ scope, roles, swimlanes, roleSrn }) => {\n if (!scope.includes('/Swimlane')) {\n const role = roles\n .get('data', List())\n .find(role => role.get('srn') === roleSrn)\n\n if (!role) {\n return scope\n }\n\n const roleIsPlatform = isPlatformRole(role)\n if (roleIsPlatform) {\n return (Platform)\n } else {\n return (All Swimlanes)\n }\n }\n\n const swimlane = swimlanes.find(\n swimlane => swimlane.get('resourceId') === scope\n )\n\n if (!swimlane) {\n return scope\n }\n\n return (\n \n {swimlane.get('title')}\n \n )\n}\n\nFriendlyScope.propTypes = {\n scope: PropTypes.string,\n roleSrn: PropTypes.string,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n roles: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default FriendlyScope\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Table } from 'reactstrap'\n\nimport TextLink from 'components/TextLink'\n\nimport FriendlyScope from './FriendlyScope'\n\nconst RolesDisplay = ({ data, swimlanes, removeRole, roles }) => {\n return (\n \n \n \n \n \n \n \n \n {data.map((row, index) => (\n \n \n \n \n \n ))}\n \n
RoleScope\n
{row.role}\n \n \n {\n removeRole(row)\n }\n : undefined\n }\n >\n remove\n \n
\n )\n}\n\nRolesDisplay.propTypes = {\n data: PropTypes.array,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n removeRole: PropTypes.func,\n roles: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default RolesDisplay\nexport { default as FriendlyScope } from './FriendlyScope'\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'form'\n};\n\nvar Form =\n/*#__PURE__*/\nfunction (_Component) {\n _inheritsLoose(Form, _Component);\n\n function Form(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = Form.prototype;\n\n _proto.getRef = function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n this.ref = ref;\n };\n\n _proto.submit = function submit() {\n if (this.ref) {\n this.ref.submit();\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n inline = _this$props.inline,\n Tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutPropertiesLoose(_this$props, [\"className\", \"cssModule\", \"inline\", \"tag\", \"innerRef\"]);\n\n var classes = mapToCssModules(classNames(className, inline ? 'form-inline' : false), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n };\n\n return Form;\n}(Component);\n\nForm.propTypes = propTypes;\nForm.defaultProps = defaultProps;\nexport default Form;","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n SelectAllSwimlanes: {\n id: 'app.components.ScopeAssignmentForm.SelectAllSwimlanes',\n defaultMessage: 'All Swimlanes',\n },\n SelectAllSwimlaneMessage: {\n id: 'app.components.ScopeAssignmentForm.SelectAllSwimlaneMessage',\n defaultMessage:\n 'Assign this role for all swimlanes, including swimlanes created in the future',\n },\n ScopeLabel: {\n id: 'app.components.ScopeAssignmentForm.ScopeLabel',\n defaultMessage: 'Swimlane(s)',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage } from 'react-intl'\nimport { FormGroup } from 'reactstrap'\n\nimport FormLabel from 'components/FormLabel'\nimport Select from 'components/Select'\nimport { PlainCheckbox } from 'components/Checkbox'\nimport Icon from 'components/Icon'\nimport Tooltip from 'components/Tooltip'\n\nimport messages from './messages'\n\nexport function ScopeAssignmentForm({\n swimlanes,\n scopeInputValue,\n platformPerm,\n handleScopeInputChange,\n handlePlatformPermClick,\n canSelectAllSwimlanes,\n isDisabled,\n}) {\n const onChangeCheckbox = newVal => {\n handleScopeInputChange([])\n handlePlatformPermClick(newVal)\n }\n\n const scopeOptions = swimlanes\n .toList()\n .sortBy(swimlane => swimlane.get('title'))\n .toJS()\n .map(({ resourceId: value, title: label }) => ({ value, label }))\n\n return (\n
\n \n \n \n \n
\n \n
\n
\n \n
\n {canSelectAllSwimlanes && (\n
\n {' '}\n \n  {' '}\n \n }\n tooltipContent={\n \n }\n />\n
\n )}\n \n
\n )\n}\n\nScopeAssignmentForm.propTypes = {\n swimlanes: ImmutablePropTypes.map.isRequired,\n scopeInputValue: PropTypes.array,\n platformPerm: PropTypes.bool,\n handleScopeInputChange: PropTypes.func,\n handlePlatformPermClick: PropTypes.func,\n canSelectAllSwimlanes: PropTypes.bool,\n isDisabled: PropTypes.bool,\n}\n\nexport default ScopeAssignmentForm\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n assignToUser: {\n id: 'app.containers.RoleManagementPage.assignToUser',\n defaultMessage: 'Assign to User',\n },\n assignRoleToUser: {\n id: 'app.containers.RoleManagementPage.assignRoleToUser',\n defaultMessage: 'Assign Role to User',\n },\n assignmentFormError: {\n id: 'app.containers.RoleManagementPage.assignmentFormError',\n defaultMessage: 'Please enter all required fields',\n },\n assignmentFormSubmitError: {\n id: 'app.containers.RoleManagementPage.assignmentFormError',\n defaultMessage:\n 'There was an error creating the assignment. You may not have permission to assign this role.',\n },\n cancel: {\n id: 'app.containers.RoleManagementPage.cancel',\n defaultMessage: 'Cancel',\n },\n createRole: {\n id: 'app.containers.RoleManagementPage.createRole',\n defaultMessage: 'Create Role',\n },\n description: {\n id: 'app.containers.RoleManagementPage.description',\n defaultMessage: 'Description',\n },\n errorOccurred: {\n id: 'app.containers.RoleManagementPage.errorOccurred',\n defaultMessage: 'An error occurred',\n },\n forSwimlanePermissions: {\n id: 'app.containers.RoleManagementPage.forSwimlanePermissions',\n defaultMessage: 'for swimlane permissions only',\n },\n name: {\n id: 'app.containers.RoleManagementPage.name',\n defaultMessage: 'Name',\n },\n numberOfUsers: {\n id: 'app.containers.RoleManagementPage.numberOfUsers',\n defaultMessage: 'Number Of Users',\n },\n permissions: {\n id: 'app.containers.RoleManagementPage.permissions',\n defaultMessage: 'Permissions',\n },\n platformPerms: {\n id: 'app.containers.RoleManagementPage.platformPerms',\n defaultMessage: 'Allow Platform Permissions',\n },\n roleDetails: {\n id: 'app.containers.RoleManagementPage.roleDetails',\n defaultMessage: 'Role Details',\n },\n roles: {\n id: 'app.containers.RoleManagementPage.roles',\n defaultMessage: 'Roles',\n },\n save: {\n id: 'app.containers.RoleManagementPage.save',\n defaultMessage: 'Save',\n },\n selectAllSwimlanes: {\n id: 'app.containers.RoleManagementPage.selectAllSwimlanes',\n defaultMessage: 'All',\n },\n selectAllSwimlanesMessage: {\n id: 'app.containers.RoleManagementPage.selectAllSwimlanesMessage',\n defaultMessage:\n 'Assign this role for all swimlanes, including swimlanes created in the future',\n },\n scope: {\n id: 'app.containers.RoleManagementPage.scope',\n defaultMessage: 'Scope',\n },\n selectAll: {\n id: 'app.containers.RoleManagementPage.selectAll',\n defaultMessage: 'Select All',\n },\n unassign: {\n id: 'app.containers.RoleManagementPage.unassign',\n defaultMessage: 'Unassign',\n },\n unassignRole: {\n id: 'app.containers.RoleManagementPage.unassignRole',\n defaultMessage: 'Unassign Role',\n },\n unselectAll: {\n id: 'app.containers.RoleManagementPage.unselectAll',\n defaultMessage: 'Unselect All',\n },\n user: {\n id: 'app.containers.RoleManagementPage.user',\n defaultMessage: 'User',\n },\n users: {\n id: 'app.containers.RoleManagementPage.users',\n defaultMessage: 'Users',\n },\n usersAssignmentPreamble: {\n id: 'app.containers.RoleManagementPage.users',\n defaultMessage: 'The following users have been assigned this role',\n },\n\n // ~~ permission type names ~~\n permissionTypeName_sonrai: {\n id: 'app.containers.RoleManagementPage.permissionTypeName_sonrai',\n defaultMessage: 'Sonrai Platform',\n },\n permissionTypeName_swimlane: {\n id: 'app.containers.RoleManagementPage.permissionTypeName_swimlane',\n defaultMessage: 'Swimlane',\n },\n\n // ~~~ permission type descriptions ~~~\n permissionTypeDescription_sonrai: {\n id: 'app.containers.RoleManagementPage.permissionTypeName_sonrai',\n defaultMessage: 'Allowed Sonrai platform permissions',\n },\n permissionTypeDescription_swimlane: {\n id: 'app.containers.RoleManagementPage.permissionTypeName_swimlane',\n defaultMessage: 'Allowed swimlane permissions',\n },\n\n // ~~~ permission actions ~~~\n ['permissionAction_*']: {\n id: 'app.containers.RoleManagementPage.permissionAction_*',\n defaultMessage: '*',\n },\n ['permissionAction_edit.exemptedidentity']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.exemptedidentity',\n defaultMessage: 'Edit Exempted Identity',\n },\n ['permissionAction_edit.integrations']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.integrations',\n defaultMessage: 'Edit Integration',\n },\n ['permissionAction_assign.integrations']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_assign.integrations',\n defaultMessage: 'Assign Integration',\n },\n ['permissionAction_edit.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.tickets',\n defaultMessage: 'Edit Ticket',\n },\n ['permissionAction_edit.objectives']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.objectives',\n defaultMessage: 'Edit Objectives',\n },\n ['permissionAction_edit.tickettemplates']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.tickettemplates',\n defaultMessage: 'Edit Custom Ticket Templates',\n },\n ['permissionAction_acceptrisk.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionAction_acceptrisk.tickets',\n defaultMessage: 'Accept Ticket Risk',\n },\n ['permissionAction_snooze.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionAction_snooze.tickets',\n defaultMessage: 'Snooze Tickets',\n },\n ['permissionAction_transition.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionAction_transition.tickets',\n defaultMessage: 'Transition Ticket',\n },\n ['permissionAction_edit.swimlanes']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.swimlanes',\n defaultMessage: 'Edit Swimlane',\n },\n ['permissionAction_view.swimlane']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.swimlane',\n defaultMessage: 'View Swimlane',\n },\n ['permissionAction_view.data']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.data',\n defaultMessage: 'View Data',\n },\n ['permissionAction_edit.controlframeworks']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.controlframeworks',\n defaultMessage: 'Edit Control Frameworks',\n },\n ['permissionAction_view.controlframeworks']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_view.controlframeworks',\n defaultMessage: 'View Control Frameworks',\n },\n ['permissionAction_edit.alerts']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.alerts',\n defaultMessage: 'Edit Alerts',\n },\n ['permissionAction_assign.bots']: {\n id: 'app.containers.RoleManagementPage.permissionAction_assign.bots',\n defaultMessage: 'Assign Bots',\n },\n ['permissionAction_edit.bots']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.bots',\n defaultMessage: 'Edit Bots',\n },\n ['permissionAction_edit.collectors']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.collectors',\n defaultMessage: 'Edit Collectors',\n },\n ['permissionAction_edit.crmsettings']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.crmsettings',\n defaultMessage: 'Edit CRM Settings',\n },\n ['permissionAction_edit.dataclassificationconfig']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.edit.dataclassificationconfig',\n defaultMessage: 'Edit Data Classification Configuration',\n },\n ['permissionAction_edit.roles']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.roles',\n defaultMessage: 'Edit Roles',\n },\n ['permissionAction_edit.searches']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.searches',\n defaultMessage: 'Edit Searches',\n },\n ['permissionAction_edit.resources']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.resources',\n defaultMessage: 'Edit Resources',\n },\n ['permissionAction_edit.solutioncards']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.solutioncards',\n defaultMessage: 'Edit Solution Cards',\n },\n ['permissionAction_execute.bots']: {\n id: 'app.containers.RoleManagementPage.permissionAction_execute.bots',\n defaultMessage: 'Execute Bots',\n },\n ['permissionAction_view.ticket']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.ticket',\n defaultMessage: 'View Tickets',\n },\n ['permissionAction_edit.ticket']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.ticket',\n defaultMessage: 'Edit Tickets',\n },\n ['permissionAction_edit.users']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.users',\n defaultMessage: 'Edit Users',\n },\n ['permissionAction_edit.invites']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.invites',\n defaultMessage: 'Edit Invites',\n },\n ['permissionAction_view.audit']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.audit',\n defaultMessage: 'View Audit',\n },\n ['permissionAction_view.collectors']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.ticket',\n defaultMessage: 'View Collectors',\n },\n ['permissionAction_edit.roleassignments']: {\n id: 'app.containers.RoleManagementPage.edit.roleassignments',\n defaultMessage: 'Edit Role Assignments',\n },\n ['permissionAction_edit.escalations']: {\n id: 'app.containers.RoleManagementPage.edit.escalations',\n defaultMessage: 'Edit Escalation Schemes',\n },\n ['permissionAction_assign.escalations']: {\n id: 'app.containers.RoleManagementPage.assign.escalations',\n defaultMessage: 'Assign Escalations',\n },\n ['permissionAction_edit.customclassifiers']: {\n id: 'app.containers.RoleManagementPage.edit.customclassifiers',\n defaultMessage: 'Edit Custom Data Classifiers',\n },\n // ~~ permission descriptions ~~\n ['permissionDescription_*']: {\n id: 'app.containers.RoleManagementPage.permissionAction_*',\n defaultMessage: 'Super privilege can do anything',\n },\n ['permissionDescription_edit.alerts']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.alerts',\n defaultMessage: 'Dismiss alerts but not change the baseline',\n },\n ['permissionDescription_edit.exemptedidentity']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.exemptedidentity',\n defaultMessage:\n 'Create and edit a list of resource IDs that are exempt from Sonrai prevention policies',\n },\n ['permissionDescription_edit.integrations']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.integrations',\n defaultMessage: 'Create, update and remove platform integrations',\n },\n ['permissionDescription_assign.integrations']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_assign.integrations',\n defaultMessage:\n 'Enable integration notifications from tickets in the assigned swimlane',\n },\n ['permissionDescription_edit.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.tickets',\n defaultMessage: 'Modify tickets in this swimlane',\n },\n ['permissionDescription_edit.objectives']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.objectives',\n defaultMessage: 'Create, Update, Delete, and Reorder Objectives',\n },\n ['permissionDescription_edit.tickettemplates']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.tickettemplates',\n defaultMessage: 'Modify templates for custom tickets',\n },\n ['permissionDescription_transition.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.tickets',\n defaultMessage: 'Update the status of tickets in this swimlane',\n },\n ['permissionDescription_acceptrisk.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.tickets',\n defaultMessage: 'Accept the risk identified in a ticket',\n },\n ['permissionDescription_snooze.tickets']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.tickets',\n defaultMessage: 'Snooze a ticket',\n },\n\n ['permissionDescription_edit.crmsettings']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.crmsettings',\n defaultMessage:\n 'Set baseline, enable or disable monitoring and change detection and also they can dismiss alerts',\n },\n ['permissionDescription_edit.dataclassificationconfig']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.edit.dataclassificationconfig',\n defaultMessage:\n 'Submit jobs to classify data contained in buckets, blob storage and databases',\n },\n ['permissionDescription_edit.resources']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.resources',\n defaultMessage: 'Change importance, set friendly name, add/remove tags',\n },\n ['permissionDescription_edit.roles']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.roles',\n defaultMessage:\n 'Create, update and delete custom roles and their permissions',\n },\n ['permissionDescription_execute.bots']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_execute.bots',\n defaultMessage:\n 'Manually trigger remediation bots to run for a ticket in their swimlane',\n },\n ['permissionDescription_edit.searches']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_edit.alerts',\n defaultMessage: 'Create, Update, and Delete custom searches',\n },\n ['permissionDescription_edit.solutioncards']: {\n id:\n 'app.containers.RoleManagementPage.permissionDescription_edit.solutioncards',\n defaultMessage: 'Create, Update, and Delete Solution Cards and Widgets',\n },\n ['permissionDescription_edit.swimlanes']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.swimlanes',\n defaultMessage:\n 'Users will be allowed to edit the configuration of swimanes',\n },\n ['permissionDescription_edit.users']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.users',\n defaultMessage:\n 'Invite, disable, and re-enable users, and also can reassign users to different roles',\n },\n ['permissionDescription_edit.invites']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.invites',\n defaultMessage: 'Create, Update, and Delete, user invitations.',\n },\n ['permissionDescription_view.swimlane']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.swimlane',\n defaultMessage:\n 'Users will be allowed to view the configuration of the swimane',\n },\n ['permissionDescription_view.data']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.data',\n defaultMessage:\n 'Users will see data from this swimlane in search results and solution center widgets and will be able to view the node views for any resources in the swimlane.',\n },\n ['permissionDescription_edit.controlframeworks']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.controlframeworks',\n defaultMessage: 'Users will be able to edit the control framework',\n },\n ['permissionDescription_view.controlframeworks']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_view.controlframeworks',\n defaultMessage: 'Users will be able to view the control framework',\n },\n ['permissionDescription_edit.bots']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.bots',\n defaultMessage: 'Users can edit and delete bots',\n },\n ['permissionDescription_assign.bots']: {\n id: 'app.containers.RoleManagementPage.permissionDescription_assign.bots',\n defaultMessage: 'Users can assign bots to swimlanes',\n },\n ['permissionDescription_view.ticket']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.ticket',\n defaultMessage:\n 'Users will be able to to view the tickets assigned to them and others',\n },\n ['permissionDescription_edit.ticket']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.ticket',\n defaultMessage: 'Users can edit tickets in the system',\n },\n ['permissionDescription_view.collectors']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.ticket',\n defaultMessage: 'Users will be able to to view the collectors',\n },\n ['permissionDescription_edit.collectors']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.ticket',\n defaultMessage: 'Users can edit collectors',\n },\n ['permissionDescription_view.audit']: {\n id: 'app.containers.RoleManagementPage.permissionAction_view.audit',\n defaultMessage: 'View audit logs of user activity',\n },\n ['permissionDescription_edit.roleassignments']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.roleassignments',\n defaultMessage:\n \"Add and remove other users's roles. Cannot add roles outside of their own scope.\",\n },\n ['permissionDescription_edit.escalations']: {\n id: 'app.containers.RoleManagementPage.permissionAction_edit.escalations',\n defaultMessage:\n 'Create and delete escalation schemes while also creating and deleting escalation assignments, filters, and rules.',\n },\n ['permissionDescription_assign.escalations']: {\n id: 'app.containers.RoleManagementPage.permissionAction_assign.escalations',\n defaultMessage:\n 'Assign and unassign swimlanes to escalation schemes. Cannot assign or unassign swimlanes they do not have ownership of.',\n },\n ['permissionDescription_edit.customclassifiers']: {\n id:\n 'app.containers.RoleManagementPage.permissionAction_edit.customclassifiers',\n defaultMessage: 'Create, Update, and Delete Custom Data Classifiers.',\n },\n})\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport { SWIMLANE_SCOPED_PERMISSIONS } from 'appConstants'\n\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\nimport EmptyText from 'components/EmptyText'\n\nimport messages from './messages'\n\n/**\n * this is the list of the permissions in a role\n */\nexport class RolePermissions extends Component {\n constructor(props) {\n super(props)\n this.sectionRefs = {}\n\n this.styles = {\n sectionContent: {\n marginBottom: '64px',\n },\n sectionContentHeaderContainer: {\n paddingTop: '14px',\n gridTemplateColumns: 'auto 200px',\n display: 'grid',\n marginBottom: '1em',\n },\n sectionContentHeaderControls: {\n textAlign: 'right',\n },\n sectionContentControlsLink: {\n marginLeft: '1em',\n },\n }\n }\n\n /**\n * TODO this will be different in future\n */\n getPermissionsGrouped = () => {\n return this.props.permissions.sort().reduce(\n (groupedPerms, perm) => {\n if (SWIMLANE_SCOPED_PERMISSIONS.includes(perm)) {\n groupedPerms.swimlane.push(perm)\n } else {\n groupedPerms.sonrai.push(perm)\n }\n return groupedPerms\n },\n { sonrai: [], swimlane: [] }\n )\n }\n\n renderSectionContent = ({ sectionKey, permissions }) => {\n let permissionsWithColumns = permissions.map(permission => ({\n action: permission,\n description: permission,\n }))\n\n const customColumnConfig = {\n action: {\n width: 270,\n cellRendererFramework: params => (\n \n ),\n },\n description: {\n flex: 1,\n cellRendererFramework: params => (\n \n ),\n },\n }\n\n if (this.props.editMode) {\n permissionsWithColumns = permissionsWithColumns.map(permission => ({\n ...permission,\n allow: permission.action,\n }))\n\n // TODO if we implement the Edit/Create role, add a toggle here\n customColumnConfig.allow = {\n width: 100,\n cellRendererFramework: () => {\n return Toggle\n },\n }\n }\n\n return (\n {\n this.sectionRefs[sectionKey] = element\n }}\n >\n \n
\n \n
\n {this.props.editMode && (\n \n \n Select All\n \n \n Clear All\n \n
\n )}\n \n
\n {permissionsWithColumns.length === 0 ? (\n (None Set)\n ) : (\n \n )}\n
\n \n )\n }\n\n render() {\n const groupedPermissions = this.getPermissionsGrouped()\n\n const sectionContent = Object.keys(groupedPermissions).map(key => {\n return this.renderSectionContent({\n sectionKey: key,\n permissions: groupedPermissions[key],\n })\n })\n\n return (\n
\n
{sectionContent}
\n
\n )\n }\n}\n\nRolePermissions.defaultProps = {\n editMode: false,\n}\n\nRolePermissions.propTypes = {\n editMode: PropTypes.bool,\n permissions: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n}\n\nexport default RolePermissions\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport { fromJS, List, Set, Map } from 'immutable'\nimport _ from 'lodash'\nimport {\n Form,\n FormGroup,\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n} from 'reactstrap'\nimport Select from 'react-select'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport ScopeAssignmentForm from 'components/ScopeAssignmentForm'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport { getCurrentOrg } from 'auth/current-org'\n\nimport { SWIMLANE_SCOPED_PERMISSIONS } from 'appConstants'\nimport messages from './messages'\n\nconst initialState = () => ({\n assignmentModalOpen: false,\n assignmentFormError: false,\n assignmentFormValue: fromJS({\n userSrn: null,\n scopes: null,\n platform: false,\n }),\n})\n\n/**\n * This component is the modal that comes up when on the role managment\n * page that can be used to assign a role to a user. It also renders the\n * button\n */\nclass AssignRoleToUserModal extends Component {\n constructor(props) {\n super(props)\n this.state = initialState()\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.roleAssignment.get('inProgress') &&\n !this.props.roleAssignment.get('inProgress') &&\n !this.props.roleAssignment.get('error')\n ) {\n this.closeAssignmentModal()\n }\n }\n\n openAssignmentModal = () => {\n this.setState({ assignmentModalOpen: true })\n }\n\n closeAssignmentModal = () => {\n this.setState(initialState())\n this.props.assignUserToRoleErrorClear()\n }\n\n handleUserAssignSelect = value => {\n this.setState(oldState => ({\n assignmentFormValue: oldState.assignmentFormValue\n .set('userSrn', value)\n .set('scopes', null)\n .set('platform', false),\n assignmentFormError: false,\n }))\n }\n\n handleScopeAssignSelect = value => {\n this.setState(oldState => ({\n assignmentFormValue: oldState.assignmentFormValue.set('scopes', value),\n assignmentFormError: false,\n }))\n }\n\n handleAssignForPlatform = () => {\n this.setState(oldState => ({\n assignmentFormValue: oldState.assignmentFormValue\n .set('platform', !oldState.assignmentFormValue.get('platform'))\n .set('scopes', null),\n assignmentFormError: false,\n }))\n }\n\n handleAssignRoleToUser = () => {\n const { userSrn, scopes, platform } = this.state.assignmentFormValue.toJS()\n const hasSwimlanePerms = this.hasSwimlaneScopedPermissions()\n const userOrg = getCurrentOrg()\n const specialOrgScope = `/org/${userOrg}/*`\n\n if (!userSrn || (hasSwimlanePerms && !scopes && !platform)) {\n this.setState({ assignmentFormError: true })\n } else {\n const scopeSRNs = (scopes || [])\n .filter(({ value }) => value !== 'All')\n .map(({ value }) => value)\n if (platform || _.isEmpty(scopeSRNs)) {\n scopeSRNs.push(specialOrgScope)\n }\n\n this.props.assignUserToRole({\n userSrn: userSrn.value,\n scopes: scopeSRNs,\n roleSrn: this.props.roleDetails.get('srn'),\n })\n }\n }\n\n /**\n * This will make a map like:\n * {\n * : {\n * data: {},\n * scopes: [ , ]\n * },\n * : {\n * data: {...},\n * scopes: [ , ]\n * },\n * }\n *\n * that we can use to figure out if the user already has the role assigned.\n * We want this datastructure so we can set the options in the modal dropdown\n *\n * Using immutable so can use the Set() class for the scopes b/c the\n * includes() method has better performance\n */\n constructScopeAssignmentIndex = () => {\n const scopeAssignmentIndex = {}\n const roleAssignments = this.props.roleDetails.getIn([\n 'roleAssignments',\n 'items',\n ])\n\n roleAssignments.forEach(assignment => {\n const user = assignment.getIn(['user', 'items', 0])\n const scope = assignment.get('scope')\n const userId = user.get('srn')\n\n // if user not aleady in structure, add empty set for them\n if (!scopeAssignmentIndex[userId]) {\n scopeAssignmentIndex[userId] = {}\n scopeAssignmentIndex[userId].data = user\n scopeAssignmentIndex[userId].scopes = new Set()\n }\n\n // if the user's entry in our map doesn't contain the scope, add to set\n if (!scopeAssignmentIndex[userId].scopes.includes[scope]) {\n scopeAssignmentIndex[userId].scopes = scopeAssignmentIndex[\n userId\n ].scopes.add(scope)\n }\n })\n\n return fromJS(scopeAssignmentIndex)\n }\n\n hasSwimlaneScopedPermissions = () => {\n const permissions = this.props.roleDetails.get('permissions', List()).toJS()\n for (let permission of permissions) {\n if (SWIMLANE_SCOPED_PERMISSIONS.includes(permission)) {\n return true\n }\n }\n }\n\n hasNonSwimlaneScopedPermissions = () => {\n const permissions = this.props.roleDetails.get('permissions', List()).toJS()\n for (let permission of permissions) {\n if (!SWIMLANE_SCOPED_PERMISSIONS.includes(permission)) {\n return true\n }\n }\n }\n\n renderModalBody() {\n if (this.props.usersloading) {\n return \n }\n\n const scopeAssignmentIndex = this.constructScopeAssignmentIndex()\n const hasSwimlanePerms = this.hasSwimlaneScopedPermissions()\n const hasNonSwimlanePerms = this.hasNonSwimlaneScopedPermissions()\n const swimlaneResourceIds = new Set(\n Object.values(this.props.swimlanes.toJS()).map(\n ({ resourceId }) => resourceId\n )\n )\n const userOrg = getCurrentOrg()\n const specialOrgScope = `/org/${userOrg}/*`\n\n let userOptions = []\n this.props.allUsers\n .filter(user => {\n const userId = user.get('srn')\n const userAssignments = scopeAssignmentIndex.get(userId)\n if (!userAssignments) {\n return true\n }\n\n let userAssignedToOrg = false\n let swimlaneAssignments = 0\n userAssignments.get('scopes').forEach(scope => {\n // count how many role assignments are for the user for simwlanes\n if (swimlaneResourceIds.includes(scope)) {\n swimlaneAssignments++\n }\n\n // if it's the special org scope, set the flag\n if (scope === specialOrgScope) {\n userAssignedToOrg = true\n }\n })\n\n // user already has * permission so don't need to add more assignments\n if (userAssignments.get('scopes').has(specialOrgScope)) {\n return false\n }\n\n // if the user isn't assigned to all the swimlanes they can be assigned\n if (\n hasSwimlanePerms &&\n swimlaneAssignments < swimlaneResourceIds.size\n ) {\n return true\n }\n\n // if the user isn't assigned to org they can be assigned\n if (hasNonSwimlanePerms && !userAssignedToOrg) {\n return true\n }\n })\n .forEach(user => {\n const srn = user.get('srn')\n const name = user.get('name')\n userOptions.push({ label: name, value: srn })\n })\n\n let filteredSwimlanes = Map()\n\n if (!this.state.assignmentFormValue.get('platform')) {\n if (this.state.assignmentFormValue.get('userSrn')) {\n const userId = this.state.assignmentFormValue.get('userSrn').value\n const userAssignments = scopeAssignmentIndex.get(userId)\n let userScopes = []\n if (userAssignments) {\n userScopes = userAssignments.scope || []\n }\n\n if (hasSwimlanePerms) {\n swimlaneResourceIds.forEach(swimlaneResourceId => {\n if (!userScopes.includes(swimlaneResourceId)) {\n const swimlane = this.props.swimlanes.find(\n swimlane => swimlaneResourceId === swimlane.get('resourceId')\n )\n\n if (undefined === swimlane) {\n // eslint-disable-next-line no-console\n console.warn(\n 'could not find swimlane with resourceId: ' +\n swimlaneResourceId\n )\n return\n }\n filteredSwimlanes = filteredSwimlanes.set(\n swimlane.get('srn'),\n swimlane\n )\n }\n })\n }\n }\n }\n\n const userRoleAssignments = this.props.allUsers.getIn(\n [this.props.currentUser || '', 'roleAssignments', 'items'],\n List()\n )\n\n const userHasSpecialOrgScope = !!userRoleAssignments.find(role => {\n const permissions = role.getIn(['role', 'items', 0, 'permissions'])\n return (\n (permissions.includes('edit.roleassignments') ||\n permissions.includes('*')) &&\n role.get('scope') === specialOrgScope\n )\n })\n\n return [\n
\n \n \n \n \n \n \n {hasSwimlanePerms && (\n \n )}\n ,\n \n {this.state.assignmentFormError && (\n \n \n \n )}\n {this.props.roleAssignment.get('error') && (\n \n \n \n )}\n ,\n ]\n }\n\n render() {\n return (\n
\n \n \n \n \n \n {this.renderModalBody()}\n \n \n \n \n \n \n {this.props.roleAssignment.get('inProgress') && (\n // progress inidcator for saving\n \n \n \n )}\n \n \n \n
\n )\n }\n}\n\nAssignRoleToUserModal.propTypes = {\n allUsers: ImmutablePropTypes.map,\n usersloading: PropTypes.bool,\n assignUserToRole: PropTypes.func,\n assignUserToRoleErrorClear: PropTypes.func.isRequired,\n roleAssignment: ImmutablePropTypes.contains({\n inProgress: PropTypes.bool,\n error: PropTypes.bool,\n }),\n roleDetails: ImmutablePropTypes.contains({\n data: ImmutablePropTypes.contains({\n srn: ImmutablePropTypes.string,\n roleAssignments: ImmutablePropTypes.contains({\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n scope: PropTypes.string,\n users: ImmutablePropTypes.contains({\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n name: PropTypes.string,\n })\n ),\n }),\n })\n ),\n }),\n }),\n }),\n swimlanes: ImmutablePropTypes.map,\n userData: ImmutablePropTypes.map,\n currentUser: PropTypes.string,\n}\nexport default AssignRoleToUserModal\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport permissionChecker from 'containers/PermissionChecker'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport { ToolbarItem } from 'components/BulkActionToolbar'\nimport EmptyText from 'components/EmptyText'\nimport { FriendlyScope } from 'components/RolesDisplay'\nimport qs from 'query-string'\nimport AssignRoleToUserModal from './AssignRoleToUserModal'\nimport messages from './messages'\nimport { stripTags } from 'utils/sonraiUtils'\n\nclass RoleUsers extends Component {\n constructor(props) {\n super(props)\n this.state = {\n gridAPI: null,\n unsavedRoleUnassignments: [],\n }\n\n this.selectAllCheckbox = React.createRef()\n\n this.styles = {\n container: {\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n },\n tableContainerStyle: {\n height: '100%',\n },\n topPartContainer: {\n display: 'grid',\n gridTemplateColumns: 'auto 200px',\n marginBottom: '10px',\n },\n unassignRoleContainer: {\n background: 'white',\n zIndex: 1,\n },\n unassignRollToolbar: {\n position: 'absolute',\n bottom: '2px',\n width: '100%',\n },\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.roleUnassignment.get('inProgress') &&\n !this.props.roleUnassignment.get('inProgress')\n ) {\n this.setState({\n unsavedRoleUnassignments: [],\n })\n if (this.state.gridAPI != null) {\n this.state.gridAPI.deselectAll()\n }\n }\n }\n\n componentWillUnmount() {\n this.setState({\n gridAPI: null,\n })\n }\n\n onLoad = ({ api }) => {\n this.setState({ gridAPI: api })\n }\n\n handleUserUnassignSelect = ({ api }) => {\n const newRows = api.getSelectedRows()\n this.setState({\n unsavedRoleUnassignments: newRows,\n })\n }\n\n handleUserNav = srn => {\n if (srn) {\n this.props.push({\n pathname: '/App/UserManagement/User',\n search: qs.stringify({\n srn,\n }),\n })\n }\n }\n\n handleUnassignUsers = () => {\n this.props.unassignUsersFromRole({\n roleSrn: this.props.roleDetails.get('srn'),\n assignmentSrns: this.state.unsavedRoleUnassignments.map(\n row => row.assignment\n ),\n })\n }\n\n renderTopPart = () => {\n return (\n
\n
\n \n
\n
\n \n \n \n
\n
\n )\n }\n\n checkboxRowTest = params => {\n return this.props.userHasPermission({\n permissionName: 'edit.roleassignments',\n resourceId: params.data.resourceId,\n })\n }\n\n renderTable = () => {\n const roleAssignments = this.props.roleDetails.getIn([\n 'roleAssignments',\n 'items',\n ])\n\n const tableData = roleAssignments\n .map(assignment => {\n const user = assignment.getIn(['user', 'items', 0])\n return {\n name: stripTags(user.get('name')),\n email: stripTags(user.get('email')),\n srn: user.get('srn'),\n scope: assignment.get('scope'),\n resourceId: user.get('resourceId'),\n assignment: assignment.get('srn'),\n }\n })\n .toJS()\n\n const cantUnassignAnyUsers =\n undefined ===\n tableData.find(row => {\n return this.props.userHasPermission({\n permissionName: 'edit.roleassignments',\n resourceId: row.resourceId,\n })\n })\n\n const bulkActions = [\n \n \n ,\n ]\n\n return (\n \n
\n {false === this.props.permissions.get('loading') &&\n // don't render until permission finished loading otherwise the\n // table will redraw after and the columns will be the wrong width\n (tableData.length > 0 ? (\n {\n if (!params.value) {\n return ''\n }\n\n return (\n \n )\n },\n },\n assignment: { hide: true },\n }}\n />\n ) : (\n (No Users assigned)\n ))}\n
\n \n )\n }\n\n render() {\n return (\n
\n {this.renderTopPart()}\n {this.renderTable()}\n
\n )\n }\n}\n\nRoleUsers.propTypes = {\n allUsers: ImmutablePropTypes.map,\n assignUserToRole: PropTypes.func,\n assignUserToRoleErrorClear: PropTypes.func,\n roleDetails: ImmutablePropTypes.contains({\n srn: PropTypes.string,\n roleAssignments: ImmutablePropTypes.contains({\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n scope: PropTypes.string,\n users: ImmutablePropTypes.contains({\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n name: PropTypes.string,\n })\n ),\n }),\n })\n ),\n }),\n }),\n roleAssignment: ImmutablePropTypes.map,\n roles: ImmutablePropTypes.iterable,\n roleUnassignment: ImmutablePropTypes.contains({\n inProgress: PropTypes.bool,\n error: PropTypes.bool,\n }),\n push: PropTypes.func,\n swimlanes: ImmutablePropTypes.map,\n unassignUsersFromRole: PropTypes.func,\n usersloading: PropTypes.bool,\n\n // ~ from permissionChecker hoc ~\n permissions: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n }),\n userHasPermission: PropTypes.func.isRequired,\n userData: ImmutablePropTypes.map,\n currentUser: PropTypes.string,\n}\n\nexport default permissionChecker(RoleUsers)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\n\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport NodeViewTabs from 'components/NodeView/NodeViewTabs'\nimport SectionHeader from 'components/SectionHeader'\nimport TextLink from 'components/TextLink'\nimport RolePermissions from './RolePermissions'\nimport RoleUsers from './RoleUsers'\nimport { Helmet } from 'react-helmet'\nimport { getNameForHelmet } from 'utils/sonraiUtils'\nimport BorderedCard from 'components/BorderedCard'\nimport permissionChecker from 'containers/PermissionChecker'\nimport messages from './messages'\n\nconst TAB_PERMS = 'TAB_PERMS'\nconst TAB_USERS = 'TAB_USERS'\nconst TABS = [TAB_PERMS, TAB_USERS]\n\n/**\n * this component is container for role information, Permission/User tabs\n */\nclass RoleDetails extends Component {\n constructor(props) {\n super(props)\n this.state = {\n activeTab: TAB_PERMS,\n }\n this.styles = {\n body: {\n height: '100%',\n },\n bodyCard: {\n height: '100%',\n },\n container: {\n height: '100%',\n padding: '1rem',\n display: 'grid',\n gridTemplateRows: 'auto auto 1fr',\n },\n breadcrumbs: {\n fontSize: '1rem',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n title: {\n fontSize: '1.5rem',\n fontWeight: '400',\n height: '2rem',\n },\n headerContainer: {\n marginBottom: '12px',\n },\n tabContent: {\n background: 'white',\n borderLeft: '1px solid #ccc',\n borderRight: '1px solid #ccc',\n borderBottom: '1px solid #ccc',\n padding: '1em 2em',\n minHeight: '100%',\n },\n }\n }\n\n handleChangeTab = tabIndex => {\n this.setState({ activeTab: TABS[tabIndex] })\n }\n\n renderNavContext = () => {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n
\n )\n }\n\n renderHeader = () => {\n return (\n \n \n {this.props.roleDetails.get('name')}\n \n
{this.props.roleDetails.get('description')}
\n
\n )\n }\n\n renderBody = () => {\n return (\n \n
\n \n \n
\n \n {this.props.userHasPermission({\n permissionName: 'edit.roleassignments',\n }) ? (\n
\n \n \n
\n \n ) : null}\n \n )\n }\n\n render() {\n return (\n
\n
\n {this.renderNavContext()}\n
\n
{this.renderHeader()}
\n
\n {this.renderBody()}\n
\n \n
\n )\n }\n}\n\nRoleDetails.propTypes = {\n allUsers: ImmutablePropTypes.map,\n assignUserToRole: PropTypes.func.isRequired,\n assignUserToRoleErrorClear: PropTypes.func.isRequired,\n push: PropTypes.func,\n roleDetails: ImmutablePropTypes.contains({\n name: PropTypes.string,\n }),\n roleAssignment: ImmutablePropTypes.map,\n roles: ImmutablePropTypes.iterable,\n roleUnassignment: ImmutablePropTypes.map.isRequired,\n swimlanes: ImmutablePropTypes.map,\n usersloading: PropTypes.bool,\n unassignUsersFromRole: PropTypes.func.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n currentUser: PropTypes.string,\n}\n\nexport default permissionChecker(RoleDetails)\n","const PREFIX = 'app/containers/RoleDetails/'\n\nexport const EDIT_FORM_VALUE_CHANGE = PREFIX + 'EDIT_FORM_VALUE_CHANGE'\n\nexport const ASSIGN_USER_TO_ROLE = PREFIX + 'ASSIGN_USER_TO_ROLE'\nexport const ASSIGN_USER_TO_ROLE_SUCCESS =\n PREFIX + 'ASSIGN_USER_TO_ROLE_SUCCESS'\nexport const ASSIGN_USER_TO_ROLE_ERROR = PREFIX + 'ASSIGN_USER_TO_ROLE_ERROR'\nexport const ASSIGN_USER_TO_ROLE_ERROR_CLEAR =\n PREFIX + 'ASSIGN_USER_TO_ROLE_ERROR_CLEAR'\n\nexport const UNASSIGN_USERS_FROM_ROLE = PREFIX + 'UNASSIGN_USERS_FROM_ROLE'\nexport const UNASSIGN_USERS_FROM_ROLE_SUCCESS =\n PREFIX + 'UNASSIGN_USERS_FROM_ROLE_SUCCESS'\nexport const UNASSIGN_USERS_FROM_ROLE_ERROR =\n PREFIX + 'UNASSIGN_USERS_FROM_ROLE_ERROR'\n","import { createAction } from 'redux-actions'\nimport {\n EDIT_FORM_VALUE_CHANGE,\n ASSIGN_USER_TO_ROLE,\n ASSIGN_USER_TO_ROLE_SUCCESS,\n ASSIGN_USER_TO_ROLE_ERROR,\n ASSIGN_USER_TO_ROLE_ERROR_CLEAR,\n UNASSIGN_USERS_FROM_ROLE,\n UNASSIGN_USERS_FROM_ROLE_SUCCESS,\n UNASSIGN_USERS_FROM_ROLE_ERROR,\n} from './constants'\n\nexport const editFormValueChange = createAction(EDIT_FORM_VALUE_CHANGE)\n\nexport const assignUserToRole = createAction(ASSIGN_USER_TO_ROLE)\nexport const assignUserToRoleSuccess = createAction(ASSIGN_USER_TO_ROLE_SUCCESS)\nexport const assignUserToRoleError = createAction(ASSIGN_USER_TO_ROLE_ERROR)\nexport const assignUserToRoleErrorClear = createAction(\n ASSIGN_USER_TO_ROLE_ERROR_CLEAR\n)\n\nexport const unassignUsersFromRole = createAction(UNASSIGN_USERS_FROM_ROLE)\nexport const unassignUsersFromRoleSuccess = createAction(\n UNASSIGN_USERS_FROM_ROLE_SUCCESS\n)\nexport const unassignUsersFromRoleError = createAction(\n UNASSIGN_USERS_FROM_ROLE_ERROR\n)\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\nimport {\n EDIT_FORM_VALUE_CHANGE,\n ASSIGN_USER_TO_ROLE,\n ASSIGN_USER_TO_ROLE_SUCCESS,\n ASSIGN_USER_TO_ROLE_ERROR,\n ASSIGN_USER_TO_ROLE_ERROR_CLEAR,\n UNASSIGN_USERS_FROM_ROLE,\n UNASSIGN_USERS_FROM_ROLE_ERROR,\n UNASSIGN_USERS_FROM_ROLE_SUCCESS,\n} from './constants'\n\nexport const edittingRoleInitialState = fromJS({\n loading: false,\n errorLoading: false,\n saving: false,\n errorSaving: false,\n data: {\n name: '',\n description: '',\n permissions: [],\n },\n})\n\nexport const initialState = fromJS({\n edittingRole: null,\n roleAssignment: {\n inProgress: false,\n error: false,\n },\n roleUnassignment: {\n inProgress: false,\n error: false,\n },\n})\n\nconst roleDetailsReducer = handleActions(\n {\n [EDIT_FORM_VALUE_CHANGE]: (state, { payload }) =>\n state.setIn(['edittingRole', 'data'], fromJS(payload)),\n\n [ASSIGN_USER_TO_ROLE]: state =>\n state\n .setIn(['roleAssignment', 'inProgress'], true)\n .setIn(['roleAssignment', 'error'], false),\n [ASSIGN_USER_TO_ROLE_ERROR]: state =>\n state\n .setIn(['roleAssignment', 'inProgress'], false)\n .setIn(['roleAssignment', 'error'], true),\n [ASSIGN_USER_TO_ROLE_SUCCESS]: state =>\n state\n .setIn(['roleAssignment', 'inProgress'], false)\n .setIn(['roleAssignment', 'error'], false),\n [ASSIGN_USER_TO_ROLE_ERROR_CLEAR]: state =>\n state.setIn(['roleAssignment', 'error'], false),\n\n // role assignment actions\n [UNASSIGN_USERS_FROM_ROLE]: state =>\n state\n .setIn(['roleUnassignment', 'inProgress'], true)\n .setIn(['roleUnassignment', 'error'], false),\n [UNASSIGN_USERS_FROM_ROLE_ERROR]: state =>\n state\n .setIn(['roleUnassignment', 'inProgress'], false)\n .setIn(['roleUnassignment', 'error'], true),\n [UNASSIGN_USERS_FROM_ROLE_SUCCESS]: state =>\n state\n .setIn(['roleUnassignment', 'inProgress'], false)\n .setIn(['roleUnassignment', 'error'], false),\n },\n initialState\n)\n\nexport default roleDetailsReducer\n","import { createSelector } from 'reselect'\nimport qs from 'query-string'\nimport _ from 'lodash'\nimport { Map, List } from 'immutable'\n\nimport { selectAllRoles } from 'containers/SonraiData/selectors'\nimport { initialState } from './reducers'\n\nconst selectRoleDetailsDomain = state =>\n state.get('roleDetails') || initialState\n\nexport const selectEdittingRole = createSelector(\n selectRoleDetailsDomain,\n state => state.get('edittingRole')\n)\n\nexport const selectRoleAssignment = createSelector(\n selectRoleDetailsDomain,\n state => state.get('roleAssignment')\n)\n\nexport const selectRoleUnassignment = createSelector(\n selectRoleDetailsDomain,\n state => state.get('roleUnassignment')\n)\n\nexport const selectRoleId = (state, props) => {\n return qs.parse(_.get(props, ['location', 'search'], '')).roleId\n}\n\nexport const selectRole = createSelector(\n [selectAllRoles, selectRoleId],\n (sonraiRoles, roleId) =>\n sonraiRoles.get('data', List()).find(role => role.get('srn') === roleId) ||\n Map()\n)\n","import { all, put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\n\nimport { getClient } from 'apolloClient'\nimport { UNASSIGN_USERS_FROM_ROLE, ASSIGN_USER_TO_ROLE } from './constants'\nimport {\n unassignUsersFromRoleSuccess,\n assignUserToRoleSuccess,\n unassignUsersFromRoleError,\n assignUserToRoleError,\n} from './actions'\n\nfunction* unassignUsersFromRole(action) {\n const deleters = action.payload.assignmentSrns.map(assignmentSrn => ({\n srn: assignmentSrn,\n }))\n try {\n const client = yield getClient()\n const result = client.mutate({\n variables: { deleters },\n mutation: gql`\n mutation delete($deleters: [SonraiRoleAssignmentDeleter!]!) {\n DeleteSonraiRoleAssignments(input: $deleters) {\n count\n }\n }\n `,\n })\n if (result.data == false) {\n // TODO check for null here once this is implemented\n throw 'delete mutation returned false'\n }\n yield put(unassignUsersFromRoleSuccess())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error unassigning users from roles', e)\n yield put(unassignUsersFromRoleError())\n }\n}\n\nfunction* assignUserToRole(action) {\n try {\n const { scopes, userSrn, roleSrn } = action.payload\n const assignments = scopes.map(scope => ({\n scope,\n userSrn,\n roleSrn,\n }))\n const client = yield getClient()\n const result = yield client.mutate({\n variables: { assignments },\n mutation: gql`\n mutation ceateRoleAssignment(\n $assignments: [SonraiRoleAssignmentCreator!]!\n ) {\n CreateSonraiRoleAssignments(input: $assignments) {\n count\n }\n }\n `,\n })\n const data = _.get(\n result,\n ['data', 'CreateSonraiRoleAssignments', 'count'],\n null\n )\n if (!data) {\n throw 'did not receive data result'\n }\n yield put(assignUserToRoleSuccess())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error assigning the user to the role ', e)\n yield put(assignUserToRoleError())\n }\n}\n\nfunction* roleDetailsSaga() {\n yield all([\n takeLatest(ASSIGN_USER_TO_ROLE, assignUserToRole),\n takeLatest(UNASSIGN_USERS_FROM_ROLE, unassignUsersFromRole),\n ])\n}\n\nexport default roleDetailsSaga\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\n\nimport RoleDetails from './RoleDetails'\nimport {\n assignUserToRole,\n assignUserToRoleErrorClear,\n unassignUsersFromRole,\n} from './actions'\n\nimport {\n selectSwimlanes,\n selectAllRoles,\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport {\n selectRole,\n selectRoleAssignment,\n selectRoleUnassignment,\n} from './selectors'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport reducer from './reducers'\nimport sagas from './sagas'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\n\nexport class RoleDetailsPage extends Component {\n constructor(props, context) {\n super(props, context)\n this.styles = {\n container: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n }\n }\n\n renderBody() {\n return (\n \n )\n }\n\n render() {\n return (\n
\n {this.renderBody()}\n
\n )\n }\n}\n\nRoleDetailsPage.propTypes = {\n // ~ bound action creators ~\n assignUserToRole: PropTypes.func.isRequired,\n assignUserToRoleErrorClear: PropTypes.func.isRequired,\n unassignUsersFromRole: PropTypes.func.isRequired,\n push: PropTypes.func,\n\n // ~ props from redux store ~\n allUsers: ImmutablePropTypes.map,\n roleDetails: ImmutablePropTypes.map,\n roleAssignment: ImmutablePropTypes.map.isRequired,\n roleUnassignment: ImmutablePropTypes.map,\n roles: ImmutablePropTypes.iterable,\n swimlanes: ImmutablePropTypes.map,\n currentUser: PropTypes.string,\n usersloading: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n currentUser: selectSonraiUserSrn,\n allUsers: selectSonraiUsers,\n usersloading: selectSonraiUsersLoading,\n roleDetails: selectRole,\n roleAssignment: selectRoleAssignment,\n roleUnassignment: selectRoleUnassignment,\n swimlanes: selectSwimlanes,\n roles: selectAllRoles,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n assignUserToRole,\n assignUserToRoleErrorClear,\n unassignUsersFromRole,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'roleDetails', reducer })\nconst withSaga = injectSaga({\n key: 'roleDetails',\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(withConnect, withSaga, withReducer)(RoleDetailsPage)\n"],"sourceRoot":""}