Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com> --- Notes: new in v2
test/Makefile | 1 + test/perm-test8.pl | 68 ++++++++++++++++++++++++++++++++++++++++++++++ test/test8.cfg | 28 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 test/perm-test8.pl create mode 100644 test/test8.cfg diff --git a/test/Makefile b/test/Makefile index 5c9c94e..11e78b1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -10,4 +10,5 @@ check: perl -I.. perm-test5.pl perl -I.. perm-test6.pl perl -I.. perm-test7.pl + perl -I.. perm-test8.pl diff --git a/test/perm-test8.pl b/test/perm-test8.pl new file mode 100644 index 0000000..67e0cb1 --- /dev/null +++ b/test/perm-test8.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w + +use strict; +use PVE::Tools; +use PVE::AccessControl; +use PVE::RPCEnvironment; + +my $rpcenv = PVE::RPCEnvironment->init('cli'); + +my $cfgfn = "test8.cfg"; +$rpcenv->init_request(userconfig => $cfgfn); + +sub check_roles { + my ($user, $path, $expected_result) = @_; + + my $roles = PVE::AccessControl::roles($rpcenv->{user_cfg}, $user, $path); + my $res = join(',', sort keys %$roles); + + die "unexpected result\nneed '${expected_result}'\ngot '$res'\n" + if $res ne $expected_result; + + print "ROLES:$path:$user:$res\n"; +} + +sub check_permission { + my ($user, $path, $expected_result) = @_; + + my $perm = $rpcenv->permissions($user, $path); + my $res = join(',', sort keys %$perm); + + die "unexpected result\nneed '${expected_result}'\ngot '$res'\n" + if $res ne $expected_result; + + $perm = $rpcenv->permissions($user, $path); + $res = join(',', sort keys %$perm); + die "unexpected result (compiled)\nneed '${expected_result}'\ngot '$res'\n" + if $res ne $expected_result; + + print "PERM:$path:$user:$res\n"; +} + +check_roles('max@pve', '/', ''); +check_roles('max@pve', '/vms', 'vm_admin'); + +#user permissions overrides group permissions +check_roles('max@pve', '/vms/100', 'customer'); +check_roles('max@pve', '/vms/101', 'vm_admin'); + +check_permission('max@pve', '/', ''); +check_permission('max@pve', '/vms', 'Permissions.Modify,VM.Allocate,VM.Audit,VM.Console'); +check_permission('max@pve', '/vms/100', 'VM.Audit,VM.PowerMgmt'); + +check_permission('alex@pve', '/vms', ''); +check_permission('alex@pve', '/vms/100', 'VM.Audit,VM.PowerMgmt'); + +check_roles('max@pve', '/vms/200', 'storage_manager'); +check_roles('joe@pve', '/vms/200', 'vm_admin'); +check_roles('sue@pve', '/vms/200', 'NoAccess'); + +check_roles('carol@pam', '/vms/200', 'NoAccess'); +check_roles('carol@pam!token', '/vms/200', 'NoAccess'); +check_roles('max@pve!token', '/vms/200', 'storage_manager'); +check_roles('max@pve!token2', '/vms/200', 'customer'); + +print "all tests passed\n"; + +exit (0); + diff --git a/test/test8.cfg b/test/test8.cfg new file mode 100644 index 0000000..6b0eac6 --- /dev/null +++ b/test/test8.cfg @@ -0,0 +1,28 @@ +user:joe@pve:1: +user:max@pve:1: +token:max@pve!token::0: +token:max@pve!token2::1: +user:alex@pve:1: +user:sue@pve:1: +user:carol@pam:1: +token:carol@pam!token: + +group:testgroup1:joe@pve,max@pve,sue@pve: +group:testgroup2:alex@pve,carol@pam,sue@pve: +group:testgroup3:max@pve: + +role:storage_manager:Datastore.AllocateSpace,Datastore.Audit: +role:customer:VM.Audit,VM.PowerMgmt: +role:vm_admin:VM.Audit,VM.Allocate,Permissions.Modify,VM.Console: + +acl:1:/vms:@testgroup1:vm_admin: +acl:1:/vms/100/:alex@pve,max@pve:customer: +acl:1:/storage/nfs1:@testgroup2:storage_manager: +acl:1:/users:max@pve:Administrator: + +acl:1:/vms/200:@testgroup3:storage_manager: +acl:1:/vms/200:@testgroup2:NoAccess: + +acl:1:/vms/200:carol@pam!token:vm_admin +acl:1:/vms/200:max@pve!token:storage_manager +acl:1:/vms/200:max@pve!token2:customer -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel