package MyApp; sub check_role { my ( $c, $role ) = @_; return 1 if ( $user && $c->user->obj->role eq $role ); return 0; } sub assert_role { my ( $c, $role ) = @_; if ( ! $c->check_role( $role ) ) { $c->detach( '/access_denied' ); } } package MyApp::Controller::Root; sub auto : Private { my ( $self, $c ) = @_; $c->stash->{ 'is_admin' } = $c->check_role( 'Admin' ); return 1; } package MyApp::Controller::Admin; sub auto : Private { my ( $self, $c ) = @_; $c->assert_role( 'Admin' ); return 1; }