Select Git revision
-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
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__