mirror of
https://github.com/sct/overseerr.git
synced 2025-09-17 17:24:35 +02:00
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
This commit is contained in:
@@ -308,7 +308,9 @@ issueRoutes.post<{ issueId: string }, Issue, { message: string }>(
|
|||||||
|
|
||||||
issueRoutes.post<{ issueId: string; status: string }, Issue>(
|
issueRoutes.post<{ issueId: string; status: string }, Issue>(
|
||||||
'/:issueId/:status',
|
'/:issueId/:status',
|
||||||
isAuthenticated(Permission.MANAGE_ISSUES),
|
isAuthenticated([Permission.MANAGE_ISSUES, Permission.CREATE_ISSUES], {
|
||||||
|
type: 'or',
|
||||||
|
}),
|
||||||
async (req, res, next) => {
|
async (req, res, next) => {
|
||||||
const issueRepository = getRepository(Issue);
|
const issueRepository = getRepository(Issue);
|
||||||
// Satisfy typescript here. User is set, we assure you!
|
// Satisfy typescript here. User is set, we assure you!
|
||||||
@@ -321,6 +323,16 @@ issueRoutes.post<{ issueId: string; status: string }, Issue>(
|
|||||||
where: { id: Number(req.params.issueId) },
|
where: { id: Number(req.params.issueId) },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (
|
||||||
|
!req.user?.hasPermission(Permission.MANAGE_ISSUES) &&
|
||||||
|
issue.createdBy.id !== req.user?.id
|
||||||
|
) {
|
||||||
|
return next({
|
||||||
|
status: 401,
|
||||||
|
message: 'You do not have permission to modify this issue.',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let newStatus: IssueStatus | undefined;
|
let newStatus: IssueStatus | undefined;
|
||||||
|
|
||||||
switch (req.params.status) {
|
switch (req.params.status) {
|
||||||
|
@@ -4,6 +4,7 @@ import { MediaType } from '@server/constants/media';
|
|||||||
import { getRepository } from '@server/datasource';
|
import { getRepository } from '@server/datasource';
|
||||||
import IssueComment from '@server/entity/IssueComment';
|
import IssueComment from '@server/entity/IssueComment';
|
||||||
import Media from '@server/entity/Media';
|
import Media from '@server/entity/Media';
|
||||||
|
import { User } from '@server/entity/User';
|
||||||
import notificationManager, { Notification } from '@server/lib/notifications';
|
import notificationManager, { Notification } from '@server/lib/notifications';
|
||||||
import { Permission } from '@server/lib/permissions';
|
import { Permission } from '@server/lib/permissions';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
@@ -32,6 +33,10 @@ export class IssueCommentSubscriber
|
|||||||
})
|
})
|
||||||
).issue;
|
).issue;
|
||||||
|
|
||||||
|
const createdBy = await getRepository(User).findOneOrFail({
|
||||||
|
where: { id: issue.createdBy.id },
|
||||||
|
});
|
||||||
|
|
||||||
const media = await getRepository(Media).findOneOrFail({
|
const media = await getRepository(Media).findOneOrFail({
|
||||||
where: { id: issue.media.id },
|
where: { id: issue.media.id },
|
||||||
});
|
});
|
||||||
@@ -71,9 +76,9 @@ export class IssueCommentSubscriber
|
|||||||
notifyAdmin: true,
|
notifyAdmin: true,
|
||||||
notifySystem: true,
|
notifySystem: true,
|
||||||
notifyUser:
|
notifyUser:
|
||||||
!issue.createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
|
!createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
|
||||||
issue.createdBy.id !== entity.user.id
|
createdBy.id !== entity.user.id
|
||||||
? issue.createdBy
|
? createdBy
|
||||||
: undefined,
|
: undefined,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -87,6 +87,7 @@ export class IssueSubscriber implements EntitySubscriberInterface<Issue> {
|
|||||||
notifySystem: true,
|
notifySystem: true,
|
||||||
notifyUser:
|
notifyUser:
|
||||||
!entity.createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
|
!entity.createdBy.hasPermission(Permission.MANAGE_ISSUES) &&
|
||||||
|
entity.modifiedBy?.id !== entity.createdBy.id &&
|
||||||
(type === Notification.ISSUE_RESOLVED ||
|
(type === Notification.ISSUE_RESOLVED ||
|
||||||
type === Notification.ISSUE_REOPENED)
|
type === Notification.ISSUE_REOPENED)
|
||||||
? entity.createdBy
|
? entity.createdBy
|
||||||
|
@@ -475,7 +475,8 @@ const IssueDetails = () => {
|
|||||||
className="h-20"
|
className="h-20"
|
||||||
/>
|
/>
|
||||||
<div className="mt-4 flex items-center justify-end space-x-2">
|
<div className="mt-4 flex items-center justify-end space-x-2">
|
||||||
{hasPermission(Permission.MANAGE_ISSUES) && (
|
{(hasPermission(Permission.MANAGE_ISSUES) ||
|
||||||
|
belongsToUser) && (
|
||||||
<>
|
<>
|
||||||
{issueData.status === IssueStatus.OPEN ? (
|
{issueData.status === IssueStatus.OPEN ? (
|
||||||
<Button
|
<Button
|
||||||
|
Reference in New Issue
Block a user