all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Lukas Wagner <l.wagner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 2/2] api: notifications: give targets and matchers their own ACL namespace
Date: Tue,  7 Nov 2023 13:46:07 +0100	[thread overview]
Message-ID: <20231107124607.571477-2-l.wagner@proxmox.com> (raw)
In-Reply-To: <20231107124607.571477-1-l.wagner@proxmox.com>

Right now, matchers and targets share a single namespace due to
limitations of the section-config parser. This will probably be fixed
some time in the future.
As a preparation for that we need to ensure that the ACL tree has
separate namespaces for both.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
This patch requires the pve-manager patches from my notification
revamp patch series.


 PVE/API2/Cluster/Notifications.pm | 55 +++++++++++++++----------------
 1 file changed, 27 insertions(+), 28 deletions(-)

diff --git a/PVE/API2/Cluster/Notifications.pm b/PVE/API2/Cluster/Notifications.pm
index 8f716f26..6ff6d89e 100644
--- a/PVE/API2/Cluster/Notifications.pm
+++ b/PVE/API2/Cluster/Notifications.pm
@@ -57,7 +57,7 @@ sub raise_api_error {
 }
 
 sub filter_entities_by_privs {
-    my ($rpcenv, $entities) = @_;
+    my ($rpcenv, $prefix, $entities) = @_;
     my $authuser = $rpcenv->get_user();
 
     my $can_see_mapping_privs = ['Mapping.Modify', 'Mapping.Use', 'Mapping.Audit'];
@@ -65,7 +65,7 @@ sub filter_entities_by_privs {
     my $filtered = [grep {
 	$rpcenv->check_any(
 	    $authuser,
-	    "/mapping/notification/$_->{name}",
+	    "/mapping/notification/$prefix/$_->{name}",
 	    $can_see_mapping_privs,
 	    1
 	);
@@ -138,8 +138,7 @@ __PACKAGE__->register_method ({
     description => 'Returns a list of all entities that can be used as notification targets.',
     permissions => {
 	description => "Only lists entries where you have 'Mapping.Modify', 'Mapping.Use' or"
-	    . " 'Mapping.Audit' permissions on '/mapping/notification/<name>'."
-	    . " The special 'mail-to-root' target is available to all users.",
+	    . " 'Mapping.Audit' permissions on '/mapping/notification/targets/<name>'.",
 	user => 'all',
     },
     protected => 1,
@@ -199,7 +198,7 @@ __PACKAGE__->register_method ({
 
 	raise_api_error($@) if $@;
 
-	return filter_entities_by_privs($rpcenv, $targets);
+	return filter_entities_by_privs($rpcenv, "targets", $targets);
     }
 });
 
@@ -211,7 +210,7 @@ __PACKAGE__->register_method ({
     description => 'Send a test notification to a provided target.',
     permissions => {
 	description => "The user requires 'Mapping.Modify', 'Mapping.Use' or"
-	    . " 'Mapping.Audit' permissions on '/mapping/notification/<name>'."
+	    . " 'Mapping.Audit' permissions on '/mapping/notification/targets/<name>'."
 	    . " The special 'mail-to-root' target can be accessed by all users.",
 	user => 'all',
     },
@@ -236,7 +235,7 @@ __PACKAGE__->register_method ({
 
 	$rpcenv->check_any(
 	    $authuser,
-	    "/mapping/notification/$name",
+	    "/mapping/notification/targets/$name",
 	    $privs,
 	);
 
@@ -299,7 +298,7 @@ __PACKAGE__->register_method ({
     description => 'Returns a list of all sendmail endpoints',
     permissions => {
 	description => "Only lists entries where you have 'Mapping.Modify', 'Mapping.Use' or"
-	    . " 'Mapping.Audit' permissions on '/mapping/notification/<name>'.",
+	    . " 'Mapping.Audit' permissions on '/mapping/notification/targets/<name>'.",
 	user => 'all',
     },
     protected => 1,
@@ -324,7 +323,7 @@ __PACKAGE__->register_method ({
 	};
 	raise_api_error($@) if $@;
 
-	return filter_entities_by_privs($rpcenv, $entities);
+	return filter_entities_by_privs($rpcenv, "targets", $entities);
     }
 });
 
@@ -335,8 +334,8 @@ __PACKAGE__->register_method ({
     description => 'Return a specific sendmail endpoint',
     permissions => {
 	check => ['or',
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Audit']],
+	    ['perm', '/mapping/notification/targets/{name}', ['Mapping.Modify']],
+	    ['perm', '/mapping/notification/targets/{name}', ['Mapping.Audit']],
 	],
     },
     protected => 1,
@@ -380,7 +379,7 @@ __PACKAGE__->register_method ({
     method => 'POST',
     description => 'Create a new sendmail endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification', ['Mapping.Modify']],
+	check => ['perm', '/mapping/notification/targets', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -426,7 +425,7 @@ __PACKAGE__->register_method ({
     method => 'PUT',
     description => 'Update existing sendmail endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
+	check => [ 'perm', '/mapping/notification/targets/{name}', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -490,7 +489,7 @@ __PACKAGE__->register_method ({
     method => 'DELETE',
     description => 'Remove sendmail endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification', ['Mapping.Modify']],
+	check => ['perm', '/mapping/notification/targets', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -548,7 +547,7 @@ __PACKAGE__->register_method ({
     protected => 1,
     permissions => {
 	description => "Only lists entries where you have 'Mapping.Modify', 'Mapping.Use' or"
-	    . " 'Mapping.Audit' permissions on '/mapping/notification/<name>'.",
+	    . " 'Mapping.Audit' permissions on '/mapping/notification/targets/<name>'.",
 	user => 'all',
     },
     parameters => {
@@ -572,7 +571,7 @@ __PACKAGE__->register_method ({
 	};
 	raise_api_error($@) if $@;
 
-	return filter_entities_by_privs($rpcenv, $entities);
+	return filter_entities_by_privs($rpcenv, "targets", $entities);
     }
 });
 
@@ -584,8 +583,8 @@ __PACKAGE__->register_method ({
     protected => 1,
     permissions => {
 	check => ['or',
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Audit']],
+	    ['perm', '/mapping/notification/targets/{name}', ['Mapping.Modify']],
+	    ['perm', '/mapping/notification/targets/{name}', ['Mapping.Audit']],
 	],
     },
     parameters => {
@@ -628,7 +627,7 @@ __PACKAGE__->register_method ({
     method => 'POST',
     description => 'Create a new gotify endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification', ['Mapping.Modify']],
+	check => ['perm', '/mapping/notification/targets', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -670,7 +669,7 @@ __PACKAGE__->register_method ({
     method => 'PUT',
     description => 'Update existing gotify endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
+	check => [ 'perm', '/mapping/notification/targets/{name}', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -729,7 +728,7 @@ __PACKAGE__->register_method ({
     method => 'DELETE',
     description => 'Remove gotify endpoint',
     permissions => {
-	check => ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
+	check => [ 'perm', '/mapping/notification/targets/{name}', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -825,7 +824,7 @@ __PACKAGE__->register_method ({
     protected => 1,
     permissions => {
 	description => "Only lists entries where you have 'Mapping.Modify', 'Mapping.Use' or"
-	    . " 'Mapping.Audit' permissions on '/mapping/notification/<name>'.",
+	    . " 'Mapping.Audit' permissions on '/mapping/notification/matchers/<name>'.",
 	user => 'all',
     },
     parameters => {
@@ -849,7 +848,7 @@ __PACKAGE__->register_method ({
 	};
 	raise_api_error($@) if $@;
 
-	return filter_entities_by_privs($rpcenv, $entities);
+	return filter_entities_by_privs($rpcenv, "matchers", $entities);
     }
 });
 
@@ -861,8 +860,8 @@ __PACKAGE__->register_method ({
     protected => 1,
     permissions => {
 	check => ['or',
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
-	    ['perm', '/mapping/notification/{name}', ['Mapping.Audit']],
+	    ['perm', '/mapping/notification/matchers/{name}', ['Mapping.Modify']],
+	    ['perm', '/mapping/notification/matchers/{name}', ['Mapping.Audit']],
 	],
     },
     parameters => {
@@ -906,7 +905,7 @@ __PACKAGE__->register_method ({
     description => 'Create a new matcher',
     protected => 1,
     permissions => {
-	check => ['perm', '/mapping/notification', ['Mapping.Modify']],
+	check => ['perm', '/mapping/notification/matchers', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -956,7 +955,7 @@ __PACKAGE__->register_method ({
     method => 'PUT',
     description => 'Update existing matcher',
     permissions => {
-	check => ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
+	check => [ 'perm', '/mapping/notification/matchers/{name}', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
@@ -1022,7 +1021,7 @@ __PACKAGE__->register_method ({
     method => 'DELETE',
     description => 'Remove matcher',
     permissions => {
-	check => ['perm', '/mapping/notification/{name}', ['Mapping.Modify']],
+	check => ['perm', '/mapping/notification/matchers/{name}', ['Mapping.Modify']],
     },
     parameters => {
 	additionalProperties => 0,
-- 
2.39.2





  reply	other threads:[~2023-11-07 12:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-07 12:46 [pve-devel] [PATCH access-control 1/2] acl: allow more nesting for /mapping acl paths Lukas Wagner
2023-11-07 12:46 ` Lukas Wagner [this message]
2023-11-10  8:18 ` Thomas Lamprecht
2023-11-10  8:47   ` Lukas Wagner
2023-11-13 15:41     ` Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231107124607.571477-2-l.wagner@proxmox.com \
    --to=l.wagner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal