diff options
Diffstat (limited to 'perllib/FixMyStreet/DB/Result/User.pm')
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm index 6444cfe6a..0ba7e252c 100644 --- a/perllib/FixMyStreet/DB/Result/User.pm +++ b/perllib/FixMyStreet/DB/Result/User.pm @@ -240,18 +240,34 @@ sub split_name { return { first => $first || '', last => $last || '' }; } +sub permissions { + my ($self, $c, $body_id) = @_; + + if ($self->is_superuser) { + my $perms = $c->cobrand->available_permissions; + return { map { %$_ } values %$perms }; + } + + return unless $self->belongs_to_body($body_id); + + my @permissions = $self->user_body_permissions->search({ + body_id => $self->from_body->id, + })->all; + return { map { $_->permission_type => 1 } @permissions }; +} + sub has_permission_to { my ($self, $permission_type, $body_id) = @_; return 1 if $self->is_superuser; - return unless $self->belongs_to_body($body_id); + return 0 unless $self->belongs_to_body($body_id); my $permission = $self->user_body_permissions->find({ permission_type => $permission_type, body_id => $self->from_body->id, }); - return $permission ? 1 : undef; + return $permission ? 1 : 0; } =head2 has_body_permission_to |