X-Git-Url: https://git.proxmox.com/?p=pve-access-control.git;a=blobdiff_plain;f=PVE%2FRPCEnvironment.pm;h=d382dcbe88443f7c4ca57620e829d16eb9d488c2;hp=06360f23ddc01fe01496a67e6eac0a52df06e671;hb=a23cec1f94393eda1bc77ddb84feae7c94d923b7;hpb=c4a776a657f4d66bbd3eb9c310907731e5133a5b diff --git a/PVE/RPCEnvironment.pm b/PVE/RPCEnvironment.pm index 06360f2..d382dcb 100644 --- a/PVE/RPCEnvironment.pm +++ b/PVE/RPCEnvironment.pm @@ -259,6 +259,41 @@ sub check_user_exist { return PVE::AccessControl::check_user_exist($cfg, $user, $noerr); } +sub check_pool_exist { + my ($self, $pool, $noerr) = @_; + + my $cfg = $self->{user_cfg}; + + return 1 if $cfg->{pools}->{$pool}; + + return undef if $noerr; + + raise_perm_exc("pool '$pool' does not exist"); +} + +sub check_vm_perm { + my ($self, $user, $vmid, $pool, $privs, $any, $noerr) = @_; + + my $cfg = $self->{user_cfg}; + + if ($pool) { + return if $self->check_full($user, "/pool/$pool", $privs, $any, 1); + } + return $self->check_full($user, "/vms/$vmid", $privs, $any, $noerr); +}; + +sub check_storage_perm { + my ($self, $user, $vmid, $pool, $storeid, $privs, $any, $noerr) = @_; + + my $cfg = $self->{user_cfg}; + + if ($pool && $cfg->{pools}->{$pool} && + $cfg->{pools}->{$pool}->{storage}->{$storeid}) { + return if $self->check_full($user, "/pool/$pool", $privs, $any, 1); + } + return $self->check_full($user, "/storage/$storeid", $privs, $any, $noerr); +}; + sub is_group_member { my ($self, $group, $user) = @_;