From 491385016b0ee0bf80a923478e12c9883947e9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20Rama=C5=A1euski?= <andrej@x2.cz> Date: Fri, 5 Jun 2020 02:29:51 +0200 Subject: [PATCH] Doplneno urceni ACL --- lib/PiTube/Schema/ResultSet/ACL.pm | 61 ++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 lib/PiTube/Schema/ResultSet/ACL.pm diff --git a/lib/PiTube/Schema/ResultSet/ACL.pm b/lib/PiTube/Schema/ResultSet/ACL.pm new file mode 100644 index 0000000..8cbf6c3 --- /dev/null +++ b/lib/PiTube/Schema/ResultSet/ACL.pm @@ -0,0 +1,61 @@ +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 role + + my $acls = $class->search( + { + -or => [ + { + class => 'all', + }, + { + 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__ + -- GitLab