Skip to content

Commit fd21971

Browse files
authored
fix: issues with issues (#3267)
* fix: issues with issues * fix: don't notify on user closing/reopening own issue * fix: only show close/reopen buttons for OP and admins
1 parent d328485 commit fd21971

File tree

4 files changed

+24
-5
lines changed

4 files changed

+24
-5
lines changed

server/routes/issue.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,9 @@ issueRoutes.post<{ issueId: string }, Issue, { message: string }>(
308308

309309
issueRoutes.post<{ issueId: string; status: string }, Issue>(
310310
'/:issueId/:status',
311-
isAuthenticated(Permission.MANAGE_ISSUES),
311+
isAuthenticated([Permission.MANAGE_ISSUES, Permission.CREATE_ISSUES], {
312+
type: 'or',
313+
}),
312314
async (req, res, next) => {
313315
const issueRepository = getRepository(Issue);
314316
// Satisfy typescript here. User is set, we assure you!
@@ -321,6 +323,16 @@ issueRoutes.post<{ issueId: string; status: string }, Issue>(
321323
where: { id: Number(req.params.issueId) },
322324
});
323325

326+
if (
327+
!req.user?.hasPermission(Permission.MANAGE_ISSUES) &&
328+
issue.createdBy.id !== req.user?.id
329+
) {
330+
return next({
331+
status: 401,
332+
message: 'You do not have permission to modify this issue.',
333+
});
334+
}
335+
324336
let newStatus: IssueStatus | undefined;
325337

326338
switch (req.params.status) {

server/subscriber/IssueCommentSubscriber.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { MediaType } from '@server/constants/media';
44
import { getRepository } from '@server/datasource';
55
import IssueComment from '@server/entity/IssueComment';
66
import Media from '@server/entity/Media';
7+
import { User } from '@server/entity/User';
78
import notificationManager, { Notification } from '@server/lib/notifications';
89
import { Permission } from '@server/lib/permissions';
910
import logger from '@server/logger';
@@ -32,6 +33,10 @@ export class IssueCommentSubscriber
3233
})
3334
).issue;
3435

36+
const createdBy = await getRepository(User).findOneOrFail({
37+
where: { id: issue.createdBy.id },
38+
});
39+
3540
const media = await getRepository(Media).findOneOrFail({
3641
where: { id: issue.media.id },
3742
});
@@ -71,9 +76,9 @@ export class IssueCommentSubscriber
7176
notifyAdmin: true,
7277
notifySystem: true,
7378
notifyUser:
74-
!issue.createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
75-
issue.createdBy.id !== entity.user.id
76-
? issue.createdBy
79+
!createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
80+
createdBy.id !== entity.user.id
81+
? createdBy
7782
: undefined,
7883
});
7984
}

server/subscriber/IssueSubscriber.ts

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export class IssueSubscriber implements EntitySubscriberInterface<Issue> {
8787
notifySystem: true,
8888
notifyUser:
8989
!entity.createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
90+
entity.modifiedBy?.id !== entity.createdBy.id &&
9091
(type === Notification.ISSUE_RESOLVED ||
9192
type === Notification.ISSUE_REOPENED)
9293
? entity.createdBy

src/components/IssueDetails/index.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,8 @@ const IssueDetails = () => {
475475
className="h-20"
476476
/>
477477
<div className="mt-4 flex items-center justify-end space-x-2">
478-
{hasPermission(Permission.MANAGE_ISSUES) && (
478+
{(hasPermission(Permission.MANAGE_ISSUES) ||
479+
belongsToUser) && (
479480
<>
480481
{issueData.status === IssueStatus.OPEN ? (
481482
<Button

0 commit comments

Comments
 (0)