package Foorum::Model::Policy; use strict; use warnings; our $VERSION = '1.001000'; use parent 'Catalyst::Model'; sub fill_user_role { my ( $self, $c, $field ) = @_; my $roles = {}; $roles = $c->user->{roles} if $c->user_exists; $field ||= 'site'; if ( $roles->{$field}->{user} ) { $roles->{is_member} = 1; } if ( $roles->{site}->{moderator} || $roles->{$field}->{moderator} ) { $roles->{is_member} = 1; $roles->{is_moderator} = 1; } if ( $roles->{site}->{admin} || $roles->{$field}->{admin} ) { $roles->{is_member} = 1; $roles->{is_moderator} = 1; $roles->{is_admin} = 1; } if ( $roles->{$field}->{blocked} ) { $roles->{is_member} = 0; $roles->{is_blocked} = 1; } if ( $roles->{$field}->{pending} ) { $roles->{is_member} = 0; $roles->{is_pending} = 1; } if ( $roles->{$field}->{rejected} ) { $roles->{is_member} = 0; $roles->{is_rejected} = 1; } $c->stash->{roles} = $roles; return $roles; } sub is_admin { my ( $self, $c, $field ) = @_; &fill_user_role( $self, $c, $field ) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_admin}; } sub is_moderator { my ( $self, $c, $field ) = @_; &fill_user_role( $self, $c, $field ) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_moderator}; } sub is_user { my ( $self, $c, $field ) = @_; &fill_user_role( $self, $c, $field ) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_member}; } sub is_pending { my ( $self, $c, $field ) = @_; &fill_user_role( $self, $c, $field ) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_pending}; } sub is_rejected { my ( $self, $c, $field ) = @_; &fill_user_role( $self, $c, $field ) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_rejected}; } sub is_blocked { my ( $self, $c, $field ) = @_; &fill_user_role(@_) unless ( $c->stash->{roles} ); return $c->stash->{roles}->{is_blocked}; } 1; __END__ =pod =head1 AUTHOR Fayland Lam =cut