[Dbix-class] Problem created component with per-class config

Alex Povolotsky tarkhil at over.ru
Sun Jun 19 09:27:51 GMT 2011


Hello!

I'm trying to add a component to DBIx::Class.

I have an object hierarchy with acl checking on each level. The 
algorithm is simple (but will be extended) and uniform (and will remain so).

If we have a defined access field, make decision using it.

If no, and we have a parent, ask parent.

If no, and we have no parent, deny.

So, I've written

__PACKAGE__->load_components(qw(+Forum::Schema::Component::ACL));
__PACKAGE__->acl_setup(parent => 'part', user_acl => 'part_acls', 
group_acl => 'part_group_acls');

in my Result class.

In Component::ACL:

sub acl_setup {
   my $caller = shift;
   $params->{$caller} = { @_ };
}

sub check_acls
{
     my ($self, $c, $mode) = @_;
     my $caller = ref $self->result_source;
     die "No config for $caller"
       unless defined $config->{$caller};
...
}

The problem is that during setup I'm getting 
Forum::Schema::Result::SOMETHING, but in runtime - 
Forum::Schema::DB::SOMETHING (my model is called DB), and I did not find 
any way to retreive ::Result:: class name from ::DB:: class. Of course, 
I can use regexp, but it IS an ugly, buggy and unstable idea.

Have I missed something in docs? How do I make per-class setup in 
components?

Alex




More information about the DBIx-Class mailing list