fix: Disable 'Invite people…' control for non-admins (#1903)
closes #1902
This commit is contained in:
@ -171,6 +171,7 @@ function MainSidebar() {
|
|||||||
</Section>
|
</Section>
|
||||||
</Secondary>
|
</Secondary>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
{can.invite && (
|
||||||
<Modal
|
<Modal
|
||||||
title={t("Invite people")}
|
title={t("Invite people")}
|
||||||
onRequestClose={handleInviteModalClose}
|
onRequestClose={handleInviteModalClose}
|
||||||
@ -178,6 +179,7 @@ function MainSidebar() {
|
|||||||
>
|
>
|
||||||
<Invite onSubmit={handleInviteModalClose} />
|
<Invite onSubmit={handleInviteModalClose} />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
)}
|
||||||
<Modal
|
<Modal
|
||||||
title={t("Create a collection")}
|
title={t("Create a collection")}
|
||||||
onRequestClose={handleCreateCollectionModalClose}
|
onRequestClose={handleCreateCollectionModalClose}
|
||||||
|
@ -87,6 +87,7 @@ class People extends React.Component<Props> {
|
|||||||
{team.signinMethods} but haven’t signed in yet.
|
{team.signinMethods} but haven’t signed in yet.
|
||||||
</Trans>
|
</Trans>
|
||||||
</HelpText>
|
</HelpText>
|
||||||
|
{can.invite && (
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
data-on="click"
|
data-on="click"
|
||||||
@ -98,6 +99,7 @@ class People extends React.Component<Props> {
|
|||||||
>
|
>
|
||||||
{t("Invite people")}…
|
{t("Invite people")}…
|
||||||
</Button>
|
</Button>
|
||||||
|
)}
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab to="/settings/people" exact>
|
<Tab to="/settings/people" exact>
|
||||||
@ -135,7 +137,7 @@ class People extends React.Component<Props> {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
{can.invite && (
|
||||||
<Modal
|
<Modal
|
||||||
title={t("Invite people")}
|
title={t("Invite people")}
|
||||||
onRequestClose={this.handleInviteModalClose}
|
onRequestClose={this.handleInviteModalClose}
|
||||||
@ -143,6 +145,7 @@ class People extends React.Component<Props> {
|
|||||||
>
|
>
|
||||||
<Invite onSubmit={this.handleInviteModalClose} />
|
<Invite onSubmit={this.handleInviteModalClose} />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
)}
|
||||||
</CenteredContent>
|
</CenteredContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -195,8 +195,9 @@ router.post("users.invite", auth(), async (ctx) => {
|
|||||||
const { invites } = ctx.body;
|
const { invites } = ctx.body;
|
||||||
ctx.assertPresent(invites, "invites is required");
|
ctx.assertPresent(invites, "invites is required");
|
||||||
|
|
||||||
const user = ctx.state.user;
|
const { user } = ctx.state;
|
||||||
authorize(user, "invite", User);
|
const team = await Team.findByPk(user.teamId);
|
||||||
|
authorize(user, "invite", team);
|
||||||
|
|
||||||
const response = await userInviter({ user, invites, ip: ctx.request.ip });
|
const response = await userInviter({ user, invites, ip: ctx.request.ip });
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ describe("#users.info", () => {
|
|||||||
|
|
||||||
describe("#users.invite", () => {
|
describe("#users.invite", () => {
|
||||||
it("should return sent invites", async () => {
|
it("should return sent invites", async () => {
|
||||||
const user = await buildUser();
|
const user = await buildUser({ isAdmin: true });
|
||||||
const res = await server.post("/api/users.invite", {
|
const res = await server.post("/api/users.invite", {
|
||||||
body: {
|
body: {
|
||||||
token: user.getJwtToken(),
|
token: user.getJwtToken(),
|
||||||
@ -119,6 +119,17 @@ describe("#users.invite", () => {
|
|||||||
expect(body.data.sent.length).toEqual(1);
|
expect(body.data.sent.length).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should require admin", async () => {
|
||||||
|
const user = await buildUser();
|
||||||
|
const res = await server.post("/api/users.invite", {
|
||||||
|
body: {
|
||||||
|
token: user.getJwtToken(),
|
||||||
|
invites: [{ email: "test@example.com", name: "Test", guest: false }],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(res.status).toEqual(403);
|
||||||
|
});
|
||||||
|
|
||||||
it("should require authentication", async () => {
|
it("should require authentication", async () => {
|
||||||
const res = await server.post("/api/users.invite");
|
const res = await server.post("/api/users.invite");
|
||||||
expect(res.status).toEqual(401);
|
expect(res.status).toEqual(401);
|
||||||
|
Reference in New Issue
Block a user