Mojolicious-Plugin-ContextAuth

 view release on metacpan or  search on metacpan

lib/Mojolicious/Plugin/ContextAuth/DB/Permission.pm  view on Meta::CPAN

    }

    $params{permission_id} = Data::UUID->new->create_str;

    my $error;
    try {
        $self->dbh->db->insert( corbac_permissions => \%params);
    } 
    catch {
        $self->error( 'Invalid parameter' );
        $error = $_;
    };

    return if $error;

    my $permission = $self->load( $params{permission_id} );
    return $permission;
}

sub delete ($self, $id = $self->permission_id) {
    $self->error('');
    
    if ( !$id ) {
        $self->error( "Need permission id" );
        return;
    }

    if ( ref $id ) {
        $self->error( "Invalid permission id" );
        return;
    }
    
    my $error;
    my $result;
    
    try {
        my $tx = $self->dbh->db->begin;

        $self->dbh->db->delete(
            corbac_role_permissions => { permission_id => $id }
        );

        $result = $self->dbh->db->delete(
            corbac_permissions => {
                permission_id => $id,
            }
        );

        $tx->commit;
    }
    catch {
        $self->error( "Cannot delete permission: " . $_ );
        $error = 1;
    };

    return if $error;

    return $result->rows;
}

sub update ($self, @params) {
    $self->error('');
    
    my $id = @params % 2 ? shift @params : $self->permission_id;
    my %to_update = @params;

    if ( exists $to_update{permission_name} && (
        length $to_update{permission_name} > 255 ||
        length $to_update{permission_name} < 3
    )) {
        $self->error( 'Invalid parameter' );
        return;
    }

    delete $to_update{permission_id};

    my $result;
    my $error;
    try {
        $result = $self->dbh->db->update(
            corbac_permissions => \%to_update,
            { permission_id => $id }
        );
    }
    catch {
        $self->error( 'Invalid parameter' );
        $error = $_;
    };

    return if $error;

    if ( !$result->rows ) {
        $self->error( 'No permission updated' );
        return;
    }

    return $self->load( $id );
}

sub search ($self, %params) {
    $self->error('');

    my $error;
    my @permission_ids;

    try {
        my $result = $self->dbh->db->select(
            corbac_permissions => ['permission_id'] => \%params,
        );

        while ( my $next = $result->hash ) {
            push @permission_ids, $next->{permission_id};
        }
    }
    catch {
        $self->error('Cannot search for permissions');
        $error = $_;
    };

    return if $error;
    return @permission_ids;



( run in 0.511 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )