Files
racalmas/lib/calcms/roles.pm
Milan a769424a6e remove use base Exporter;
no need to call import
2020-11-14 21:06:23 +01:00

163 lines
4.2 KiB
Perl

package roles;
use strict;
use warnings;
no warnings 'redefine';
use Apache2::Reload();
use config();
#use base 'Exporter';
my @EXPORT_OK = qw(get_user get_user_permissions get_template_parameters get_jobs);
my $ROLES = {
'admin' => {
access_events => 1,
access_images => 1,
access_comments => 1,
access_sync => 1,
access_system => 1,
read_event_all => 1,
create_event => 1,
delete_event => 1,
update_comment => 1,
create_image => 1,
read_image_own => 1,
read_image_all => 1,
update_image_own => 1,
update_image_all => 1,
delete_image_own => 1,
delete_image_all => 1,
sync_own => 1,
sync_all => 1,
sync_select_range => 1,
upload_playlist => 1,
},
'dev' => {
access_events => 1,
access_images => 1,
access_comments => 1,
access_sync => 1,
access_system => 0,
read_event_all => 1,
create_event => 1,
delete_event => 1,
update_comment => 1,
create_image => 1,
read_image_own => 1,
read_image_all => 1,
update_image_own => 1,
update_image_all => 1,
delete_image_own => 1,
delete_image_all => 1,
sync_own => 0,
sync_all => 1,
sync_select_range => 1,
upload_playlist => 1,
},
'editor' => {
access_events => 1,
access_images => 1,
access_comments => 1,
access_sync => 1,
access_system => 0,
read_event_all => 0,
create_event => 1,
delete_event => 0,
update_comment => 0,
create_image => 1,
read_image_own => 1,
read_image_all => 1,
update_image_own => 1,
update_image_all => 0,
delete_image_own => 1,
delete_image_all => 0,
sync_own => 1,
sync_all => 0,
sync_select_range => 0,
upload_playlist => 1,
},
'nobody' => {
access_events => 0,
access_images => 0,
access_comments => 0,
access_sync => 0,
access_system => 0,
read_event_all => 0,
create_event => 0,
delete_event => 0,
update_comment => 0,
create_image => 0,
read_image_own => 0,
read_image_all => 0,
update_image_own => 0,
update_image_all => 0,
delete_image_own => 0,
delete_image_all => 0,
sync_own => 0,
sync_all => 0,
sync_select_range => 0,
upload_playlist => 0,
}
};
sub get_user($) {
my $config = shift;
my $user = $ENV{REMOTE_USER};
my $users = $config->{users};
return $user if defined $users->{$user};
return 'nobody';
}
sub get_user_permissions($) {
my $config = shift;
my $user = $ENV{REMOTE_USER} || '';
my $roles = $roles::ROLES;
return $roles->{nobody} unless $user =~ /\S/;
my $users = $config->{users};
if ( defined $users->{$user} ) {
my $role = $users->{$user};
return $roles->{$role} if defined $roles->{$role};
}
return $roles->{nobody};
}
sub get_user_jobs ($;$) {
my $config = shift;
my $user = $ENV{REMOTE_USER} || '';
return [] unless ( $user =~ /\S/ );
my $result = [];
my $jobs = $config->{jobs}->{job};
for my $job (@$jobs) {
for my $job_user ( split /\,/, $job->{users} ) {
push @$result, $job if ( $user eq $job_user );
}
}
return $result;
}
sub get_jobs($) {
my $config = shift;
return $config->{jobs}->{job};
}
sub get_template_parameters($$) {
my $config = shift;
my $user_permissions = shift;
$user_permissions = roles::get_user_permissions($config) unless defined $user_permissions;
my @user_permissions = ();
for my $usecase ( keys %$user_permissions ) {
push @user_permissions, $usecase if $user_permissions->{$usecase} eq '1';
}
return \@user_permissions;
}
return 1;