163 lines
4.2 KiB
Perl
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;
|