The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp::Controller::Root;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller::ActionRole' };

__PACKAGE__->config(namespace => q{});

sub index :Path Args(0) {
    my ($self, $c) = @_;
    $c->res->body('action: index');
}

sub edit
:Local
:Does('ACL')
:RequiresRole(editor)
:ACLDetachTo(denied)
{
    my ($self, $c) = @_;
    $c->res->body("action: edit");
}

sub killit
:Local
:Does('ACL')
:RequiresRole(killer)
:ACLDetachTo(denied)
{
    my ($self, $c) = @_;
    $c->res->body("action: killit");
}

sub crews
:Local
:Does('ACL')
:RequiresRole(editor)
:RequiresRole(banana)
:ACLDetachTo(denied)
{
    my ($self, $c) = @_;
    $c->res->body("action: crews");
}

sub reese
:Local
:Does('ACL')
:AllowedRole(sarah)
:AllowedRole(shahi)
:ACLDetachTo(denied)
{
    my ($self, $c) = @_;
    $c->res->body("action: reese");
}

sub wolverines
:Local
:Does('ACL')
:RequiresRole('swayze')
:AllowedRole('actor')
:AllowedRole('guerilla')
:ACLDetachTo(denied)
{
    my ($self, $c) = @_;
    $c->res->body("action: wolverines");
}

sub denied :Private {
    my ($self, $c) = @_;

    $c->res->status(403);
    $c->res->body('access denied');
}


__PACKAGE__->meta->make_immutable;