Skip to content

Commit

Permalink
Adjusting visibility of add-user controls based on ACLs.
Browse files Browse the repository at this point in the history
  • Loading branch information
krulis-martin committed Oct 17, 2023
1 parent 721e306 commit 7188429
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 44 deletions.
22 changes: 16 additions & 6 deletions src/components/Groups/AddStudent/AddStudent.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,24 @@ const prepareInviteOnSubmitHandler = defaultMemoize(
}
);

const AddStudent = ({ groups, groupsAccessor, groupId, instanceId, inviteUser = null }) => {
const AddStudent = ({ groups, groupsAccessor, groupId, instanceId, canSearch = false, inviteUser = null }) => {
const [dialogOpen, setDialogOpen] = useState(false);
return (
<>
<AddUserContainer
instanceId={instanceId}
id={`add-student-${groupId}`}
createActions={({ id }) => <LeaveJoinGroupButtonContainer userId={id} groupId={groupId} />}
/>
{canSearch ? (
<AddUserContainer
instanceId={instanceId}
id={`add-student-${groupId}`}
createActions={({ id }) => <LeaveJoinGroupButtonContainer userId={id} groupId={groupId} />}
/>
) : (
<div className="text-center text-muted small">
<FormattedMessage
id="app.addStudent.cannotSearch"
defaultMessage="You do not have permissions to search students, so you cannot add them explicitly."
/>
</div>
)}

{inviteUser && (
<>
Expand Down Expand Up @@ -112,6 +121,7 @@ AddStudent.propTypes = {
groups: ImmutablePropTypes.map,
groupsAccessor: PropTypes.func.isRequired,
groupId: PropTypes.string.isRequired,
canSearch: PropTypes.bool,
inviteUser: PropTypes.func,
};

Expand Down
3 changes: 2 additions & 1 deletion src/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@
"app.addSisTermForm.title": "Přidat nový semestr",
"app.addSisTermForm.winter": "Zimní semestr",
"app.addSisTermForm.year": "Rok:",
"app.addStudent.inviteButton": "Poslat pozvánku",
"app.addStudent.cannotSearch": "Nemáte oprávnění prohledávat studenty, takže je nemůžete přidávat do skupiny přímo.",
"app.addStudent.inviteButton": "Pozvat k registraci",
"app.addStudent.inviteDialog.explain": "Pozvánka bude zaslána uživateli na danou mailovou adresu. Uživatel obdrží odkaz pro registraci lokálním účtem. Detaily uživatelského profilu (jméno a email) vyplňte pečlivě, uživatel nebude mít možnost je změnit. Volitelně můžete také vybrat seznam skupin, do kterých bude uživatel přidán hned po registraci.",
"app.addStudent.inviteDialog.title": "Poslat pozvánku do ReCodExu",
"app.addUserContainer.emptyQuery": "Žádné výsledky. Zadejte vyhledávací dotaz...",
Expand Down
1 change: 1 addition & 0 deletions src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
"app.addSisTermForm.title": "Add new term",
"app.addSisTermForm.winter": "Winter term",
"app.addSisTermForm.year": "Year:",
"app.addStudent.cannotSearch": "You do not have permissions to search students, so you cannot add them explicitly.",
"app.addStudent.inviteButton": "Invite to Register",
"app.addStudent.inviteDialog.explain": "An invitation will be sent to the user at given email address. The user will receive a link for registration as a local user. User profile details (name and email) must be filled in correctly, since the user will not be able to modify them. Optionally, you may select a list of groups to which the user will be assigned immediately after registration.",
"app.addStudent.inviteDialog.title": "Send invitation to ReCodEx",
Expand Down
77 changes: 40 additions & 37 deletions src/pages/GroupStudents/GroupStudents.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ import withLinks from '../../helpers/withLinks';
import { isReady } from '../../redux/helpers/resourceManager/index';
import ResultsTable from '../../components/Groups/ResultsTable/ResultsTable';

import { isSuperadminRole, isSupervisorRole, isStudentRole } from '../../components/helpers/usersRoles';
import { isSuperadminRole, isStudentRole } from '../../components/helpers/usersRoles';
import { EMPTY_LIST, hasPermissions, hasOneOfPermissions, safeGet } from '../../helpers/common';
import GroupArchivedWarning from '../../components/Groups/GroupArchivedWarning/GroupArchivedWarning';

Expand Down Expand Up @@ -270,43 +270,46 @@ class GroupStudents extends Component {

{
// unfortunatelly, this cannot be covered by permission hints at the moment, since addStudent involes both student and group
(isSuperadminRole(effectiveRole) ||
((isGroupSupervisor || isGroupAdmin) &&
!data.organizational &&
!data.archived &&
isSupervisorRole(effectiveRole) &&
!isStudentRole(effectiveRole))) && (
<Row>
<Col xl={6}>
<Box
title={
<FormattedMessage id="app.groupStudents.addStudent" defaultMessage="Add Student" />
}
isOpen>
<AddStudent
instanceId={data.privateData.instanceId}
groups={invitableGroups}
groupsAccessor={groupsAccessor}
groupId={data.id}
inviteUser={hasPermissions(data, 'inviteStudents') ? inviteUser : null}
/>
</Box>
</Col>
!data.organizational &&
!data.archived &&
(hasPermissions(data, 'inviteStudents') || hasPermissions(data, 'editInvitations')) && (
<Row>
{hasPermissions(data, 'inviteStudents') && (
<Col xl={6}>
<Box
title={
<FormattedMessage id="app.groupStudents.addStudent" defaultMessage="Add Student" />
}
isOpen>
<AddStudent
instanceId={data.privateData.instanceId}
groups={invitableGroups}
groupsAccessor={groupsAccessor}
groupId={data.id}
canSearch={
isSuperadminRole(effectiveRole) ||
((isGroupSupervisor || isGroupAdmin) && !isStudentRole(effectiveRole))
}
inviteUser={inviteUser}
/>
</Box>
</Col>
)}

<Col xl={6}>
<Box
title={
<FormattedMessage id="app.groupStudents.invitations" defaultMessage="Invitations" />
}
isOpen>
<GroupInvitationsContainer
groupId={data.id}
actionButtons={hasPermissions(data, 'editInvitations')}
/>
</Box>
</Col>
</Row>
)
<Col xl={6}>
<Box
title={
<FormattedMessage id="app.groupStudents.invitations" defaultMessage="Invitations" />
}
isOpen>
<GroupInvitationsContainer
groupId={data.id}
actionButtons={hasPermissions(data, 'editInvitations')}
/>
</Box>
</Col>
</Row>
)
}
</>
)}
Expand Down

0 comments on commit 7188429

Please sign in to comment.