Skip to content
Snippets Groups Projects
Select Git revision
  • 92e6e49b53826236dc33e7552bf721e6649d7f1d
  • master default protected
  • set-sast-config-1
  • v2.2.3
  • v2.2.2
  • v1.4.0
  • v1.3.0
  • v1.2.1
  • v1.2.0
  • v1.1.2
  • v1.1.1
11 results

ACL.pm

Blame
  • ACL.pm 1.24 KiB
    package PiTube::Schema::ResultSet::ACL;
    
    use strict;
    use warnings;
    
    use base 'DBIx::Class::ResultSet';
    
    sub user_acl {
        my $class = shift;
        my $user  = shift;
    
        my $grants = {};
    
        # verejne streamy
    
        my $streams = $class->result_source->schema->resultset('Stream')->search(
            { is_public => 1 }
        );
    
        STREAM:
        while ( my $stream = $streams->next ) {
            $grants->{ $stream->key} = 1; #TODO: read|write
        }
    
        # na zaklade clenstvi ve skupine, role nebo user.id
    
        my $acls = $class->search(
            {
                -or => [
                    {
                        class => 'all',
                    },
                    {
                        class => 'group',
                        value => { '-in' => $user->{groups} // [] },
                    },
                    {
                        class => 'role',
                        value => { '-in' => $user->{roles} // [] },
                    },
                    {
                        class => 'user',
                        value => $user->{id} // '',
                    },
                ]
            },
            {
                join => 'stream'
            }
        );
    
    
        ACL:
        while ( my $acl = $acls->next ) {
            $grants->{ $acl->stream->key} = 1; #TODO: read|write
        }
    
        return $grants;
    
    }
    
    1;
    
    __END__