mirror of
https://github.com/sct/overseerr.git
synced 2025-12-27 00:34:56 +01:00
feat(ui): Add separate permissions for 4K auto approval (#908)
* Clarify & fix permission descriptions * Automatically check & disable auto-approve permission options when 'Manage Requests' permission is selected
This commit is contained in:
@@ -9,27 +9,36 @@ export const messages = defineMessages({
|
||||
'Full administrator access. Bypasses all permission checks.',
|
||||
users: 'Manage Users',
|
||||
usersDescription:
|
||||
'Grants permission to manage Overseerr users. Users with this permission cannot modify users with Administrator privilege, or grant it.',
|
||||
'Grants permission to manage Overseerr users. Users with this permission cannot modify users with or grant the Admin privilege.',
|
||||
settings: 'Manage Settings',
|
||||
settingsDescription:
|
||||
'Grants permission to modify all Overseerr settings. A user must have this permission to grant it to others.',
|
||||
managerequests: 'Manage Requests',
|
||||
managerequestsDescription:
|
||||
'Grants permission to manage Overseerr requests. This includes approving and denying requests.',
|
||||
'Grants permission to manage Overseerr requests. This includes approving and denying requests. All requests made by a user with this permission will be automatically approved regardless of whether or not they have Auto-Approve permissions.',
|
||||
request: 'Request',
|
||||
requestDescription: 'Grants permission to request movies and series.',
|
||||
vote: 'Vote',
|
||||
voteDescription:
|
||||
'Grants permission to vote on requests (voting not yet implemented)',
|
||||
autoapprove: 'Auto Approve',
|
||||
'Grants permission to vote on requests (voting not yet implemented).',
|
||||
autoapprove: 'Auto-Approve',
|
||||
autoapproveDescription:
|
||||
'Grants auto approval for any requests made by this user.',
|
||||
autoapproveMovies: 'Auto Approve Movies',
|
||||
'Grants automatic approval for all non-4K requests made by this user.',
|
||||
autoapproveMovies: 'Auto-Approve Movies',
|
||||
autoapproveMoviesDescription:
|
||||
'Grants auto approve for movie requests made by this user.',
|
||||
autoapproveSeries: 'Auto Approve Series',
|
||||
'Grants automatic approval for non-4K movie requests made by this user.',
|
||||
autoapproveSeries: 'Auto-Approve Series',
|
||||
autoapproveSeriesDescription:
|
||||
'Grants auto approve for series requests made by this user.',
|
||||
'Grants automatic approval for non-4K series requests made by this user.',
|
||||
autoapprove4k: 'Auto-Approve 4K',
|
||||
autoapprove4kDescription:
|
||||
'Grants automatic approval for all 4K requests made by this user.',
|
||||
autoapprove4kMovies: 'Auto-Approve 4K Movies',
|
||||
autoapprove4kMoviesDescription:
|
||||
'Grants automatic approval for 4K movie requests made by this user.',
|
||||
autoapprove4kSeries: 'Auto-Approve 4K Series',
|
||||
autoapprove4kSeriesDescription:
|
||||
'Grants automatic approval for 4K series requests made by this user.',
|
||||
request4k: 'Request 4K',
|
||||
request4kDescription: 'Grants permission to request 4K movies and series.',
|
||||
request4kMovies: 'Request 4K Movies',
|
||||
@@ -38,9 +47,9 @@ export const messages = defineMessages({
|
||||
request4kTvDescription: 'Grants permission to request 4K Series.',
|
||||
advancedrequest: 'Advanced Requests',
|
||||
advancedrequestDescription:
|
||||
'Grants permission to use advanced request options. (Ex. Changing servers/profiles/paths)',
|
||||
'Grants permission to use advanced request options (e.g., changing servers, profiles, or paths).',
|
||||
viewrequests: 'View Requests',
|
||||
viewrequestsDescription: "Grants permission to view other user's requests.",
|
||||
viewrequestsDescription: "Grants permission to view other users' requests.",
|
||||
});
|
||||
|
||||
interface PermissionEditProps {
|
||||
@@ -145,6 +154,30 @@ export const PermissionEdit: React.FC<PermissionEditProps> = ({
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'autoapprove4k',
|
||||
name: intl.formatMessage(messages.autoapprove4k),
|
||||
description: intl.formatMessage(messages.autoapprove4kDescription),
|
||||
permission: Permission.AUTO_APPROVE_4K,
|
||||
children: [
|
||||
{
|
||||
id: 'autoapprove4k-movies',
|
||||
name: intl.formatMessage(messages.autoapprove4kMovies),
|
||||
description: intl.formatMessage(
|
||||
messages.autoapprove4kMoviesDescription
|
||||
),
|
||||
permission: Permission.AUTO_APPROVE_4K_MOVIE,
|
||||
},
|
||||
{
|
||||
id: 'autoapprove4k-tv',
|
||||
name: intl.formatMessage(messages.autoapprove4kSeries),
|
||||
description: intl.formatMessage(
|
||||
messages.autoapprove4kSeriesDescription
|
||||
),
|
||||
permission: Permission.AUTO_APPROVE_4K_TV,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
|
||||
@@ -25,12 +25,23 @@ const PermissionOption: React.FC<PermissionOptionProps> = ({
|
||||
user,
|
||||
parent,
|
||||
}) => {
|
||||
const autoApprovePermissions = [
|
||||
Permission.AUTO_APPROVE,
|
||||
Permission.AUTO_APPROVE_MOVIE,
|
||||
Permission.AUTO_APPROVE_TV,
|
||||
Permission.AUTO_APPROVE_4K,
|
||||
Permission.AUTO_APPROVE_4K_MOVIE,
|
||||
Permission.AUTO_APPROVE_4K_TV,
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<div
|
||||
className={`relative flex items-start first:mt-0 mt-4 ${
|
||||
(option.permission !== Permission.ADMIN &&
|
||||
hasPermission(Permission.ADMIN, currentPermission)) ||
|
||||
(autoApprovePermissions.includes(option.permission) &&
|
||||
hasPermission(Permission.MANAGE_REQUESTS, currentPermission)) ||
|
||||
(!!parent?.permission &&
|
||||
hasPermission(parent.permission, currentPermission)) ||
|
||||
(user && user.id !== 1 && option.permission === Permission.ADMIN) ||
|
||||
@@ -49,6 +60,8 @@ const PermissionOption: React.FC<PermissionOptionProps> = ({
|
||||
disabled={
|
||||
(option.permission !== Permission.ADMIN &&
|
||||
hasPermission(Permission.ADMIN, currentPermission)) ||
|
||||
(autoApprovePermissions.includes(option.permission) &&
|
||||
hasPermission(Permission.MANAGE_REQUESTS, currentPermission)) ||
|
||||
(!!parent?.permission &&
|
||||
hasPermission(parent.permission, currentPermission)) ||
|
||||
(user &&
|
||||
@@ -68,7 +81,9 @@ const PermissionOption: React.FC<PermissionOptionProps> = ({
|
||||
checked={
|
||||
hasPermission(option.permission, currentPermission) ||
|
||||
(!!parent?.permission &&
|
||||
hasPermission(parent.permission, currentPermission))
|
||||
hasPermission(parent.permission, currentPermission)) ||
|
||||
(autoApprovePermissions.includes(option.permission) &&
|
||||
hasPermission(Permission.MANAGE_REQUESTS, currentPermission))
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -100,8 +100,14 @@ const MovieRequestModal: React.FC<RequestModalProps> = ({
|
||||
if (response.data) {
|
||||
if (onComplete) {
|
||||
onComplete(
|
||||
hasPermission(Permission.AUTO_APPROVE) ||
|
||||
hasPermission(Permission.AUTO_APPROVE_MOVIE)
|
||||
hasPermission(
|
||||
is4k ? Permission.AUTO_APPROVE_4K : Permission.AUTO_APPROVE
|
||||
) ||
|
||||
hasPermission(
|
||||
is4k
|
||||
? Permission.AUTO_APPROVE_4K_MOVIE
|
||||
: Permission.AUTO_APPROVE_MOVIE
|
||||
)
|
||||
? MediaStatus.PROCESSING
|
||||
: MediaStatus.PENDING
|
||||
);
|
||||
@@ -275,8 +281,14 @@ const MovieRequestModal: React.FC<RequestModalProps> = ({
|
||||
iconSvg={<DownloadIcon className="w-6 h-6" />}
|
||||
>
|
||||
{(hasPermission(Permission.MANAGE_REQUESTS) ||
|
||||
hasPermission(Permission.AUTO_APPROVE) ||
|
||||
hasPermission(Permission.AUTO_APPROVE_MOVIE)) && (
|
||||
hasPermission(
|
||||
is4k ? Permission.AUTO_APPROVE_4K : Permission.AUTO_APPROVE
|
||||
) ||
|
||||
hasPermission(
|
||||
is4k
|
||||
? Permission.AUTO_APPROVE_4K_MOVIE
|
||||
: Permission.AUTO_APPROVE_MOVIE
|
||||
)) && (
|
||||
<p className="mt-6">
|
||||
<Alert title={intl.formatMessage(messages.autoapproval)} type="info">
|
||||
{intl.formatMessage(messages.requestadmin)}
|
||||
|
||||
@@ -365,8 +365,12 @@ const TvRequestModal: React.FC<RequestModalProps> = ({
|
||||
}
|
||||
>
|
||||
{(hasPermission(Permission.MANAGE_REQUESTS) ||
|
||||
hasPermission(Permission.AUTO_APPROVE) ||
|
||||
hasPermission(Permission.AUTO_APPROVE_TV)) &&
|
||||
hasPermission(
|
||||
is4k ? Permission.AUTO_APPROVE_4K : Permission.AUTO_APPROVE
|
||||
) ||
|
||||
hasPermission(
|
||||
is4k ? Permission.AUTO_APPROVE_4K_TV : Permission.AUTO_APPROVE_TV
|
||||
)) &&
|
||||
!editRequest && (
|
||||
<p className="mt-6">
|
||||
<Alert
|
||||
|
||||
Reference in New Issue
Block a user