package Mojolicious::Plugin::RoutesAuthDBI::Model::Actions; #~ use Mojo::Base 'DBIx::Mojo::Model'; use Mojo::Base 'Mojolicious::Plugin::RoutesAuthDBI::Model::Base'; #~ sub new { #~ state $self = shift->SUPER::new(@_); #~ } sub access { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_array($self->sth('access action'), undef, ( @_ )); } sub actions { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectall_arrayref($self->sth('actions'), { Slice => {} }, ); } sub actions_controller { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectall_arrayref($self->sth('actions', where=>"where controller_id=?"), { Slice => {} }, (shift)); } sub action_controller { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('actions', where=>"where controller_id=? and (a.id = ? or a.action = ? )"), undef, (@_)); } sub action_controller_null {# дествие с пустым контроллером my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('actions', where=>"where controller_id is null and (a.id = ? or a.action = ? )"), undef, (@_)); } sub actions_controller_null { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectall_arrayref($self->sth('actions', where=>"where controller_id is null"), { Slice => {} },); } sub new_action { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('new action'), undef, (@_)) } 1; __DATA__ @@ access action?cached=1 %# доступ к действию в контроллере (действие-каллбак - доступ проверяется по его ID) select count(r.*) from "{%= $schema %}"."{%= $tables->{refs} %}" rc join "{%= $schema %}"."{%= $tables->{actions} %}" a on a.id=rc.id2 join "{%= $schema %}"."{%= $tables->{refs} %}" r on a.id=r.id1 ---join "{%= $schema %}"."{%= $tables->{roles} %}" o on o.id=r.id2 where rc.id1=? ---controller id and a.action=? and r.id2=any(?) --- roles ids ---and coalesce(o.disable, 0::bit) <> 1::bit ; @@ actions %# Список действий select * from ( select a.*, ac.controller_id, ac.controller from "{%= $schema %}"."{%= $tables->{actions} %}" a left join ( select a.id, c.id as controller_id, c.controller from "{%= $schema %}"."{%= $tables->{actions} %}" a join "{%= $schema %}"."{%= $tables->{refs} %}" r on a.id=r.id2 join "{%= $schema %}"."{%= $tables->{controllers} %}" c on c.id=r.id1 ) ac on a.id=ac.id-- действия с контроллером ) as a {%= $where %} @@ new action insert into "{%= $schema %}"."{%= $tables->{actions} %}" (action, callback, descr) values (?,?,?) returning *;