pull it into helper sub, since we need this one more time for token ACL
members.

Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com>
---
 PVE/AccessControl.pm | 61 +++++++++++++++++++-------------------------
 1 file changed, 26 insertions(+), 35 deletions(-)

diff --git a/PVE/AccessControl.pm b/PVE/AccessControl.pm
index a84173e..48c9930 100644
--- a/PVE/AccessControl.pm
+++ b/PVE/AccessControl.pm
@@ -1092,47 +1092,38 @@ sub write_user_config {
 
     $data .= "\n";
 
+    my $collect_ra = sub {
+       my ($acl_members, $ra, $prefix, $exclude) = @_;
+
+       foreach my $member (keys %$acl_members) {
+           next if $exclude && $member eq $exclude;
+
+           my $l0 = '';
+           my $l1 = '';
+           foreach my $role (sort keys %{$acl_members->{$member}}) {
+               my $propagate = $acl_members->{$member}->{$role};
+               if ($propagate) {
+                   $l1 .= ',' if $l1;
+                   $l1 .= $role;
+               } else {
+                   $l0 .= ',' if $l0;
+                   $l0 .= $role;
+               }
+           }
+           $ra->{0}->{$l0}->{"${prefix}${member}"} = 1 if $l0;
+           $ra->{1}->{$l1}->{"${prefix}${member}"} = 1 if $l1;
+       }
+    };
+
     foreach my $path (sort keys %{$cfg->{acl}}) {
        my $d = $cfg->{acl}->{$path};
 
        my $ra = {};
 
-       foreach my $group (keys %{$d->{groups}}) {
-           my $l0 = '';
-           my $l1 = '';
-           foreach my $role (sort keys %{$d->{groups}->{$group}}) {
-               my $propagate = $d->{groups}->{$group}->{$role};
-               if ($propagate) {
-                   $l1 .= ',' if $l1;
-                   $l1 .= $role;
-               } else {
-                   $l0 .= ',' if $l0;
-                   $l0 .= $role;
-               }
-           }
-           $ra->{0}->{$l0}->{"\@$group"} = 1 if $l0;
-           $ra->{1}->{$l1}->{"\@$group"} = 1 if $l1;
-       }
+       $collect_ra->($d->{'groups'}, $ra, '@');
 
-       foreach my $user (keys %{$d->{users}}) {
-           # no need to save, because root is always 'Administrator'
-           next if $user eq 'root@pam';
-
-           my $l0 = '';
-           my $l1 = '';
-           foreach my $role (sort keys %{$d->{users}->{$user}}) {
-               my $propagate = $d->{users}->{$user}->{$role};
-               if ($propagate) {
-                   $l1 .= ',' if $l1;
-                   $l1 .= $role;
-               } else {
-                   $l0 .= ',' if $l0;
-                   $l0 .= $role;
-               }
-           }
-           $ra->{0}->{$l0}->{$user} = 1 if $l0;
-           $ra->{1}->{$l1}->{$user} = 1 if $l1;
-       }
+       # no need to save 'root@pam', it is always 'Administrator'
+       $collect_ra->($d->{'users'}, $ra, '', 'root@pam');
 
        foreach my $rolelist (sort keys %{$ra->{0}}) {
            my $uglist = join (',', sort keys %{$ra->{0}->{$rolelist}});
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to