Why not adopt me?
This distribution is up for adoption!
If you're interested then please contact the PAUSE module admins via
email.
- new( $role, $authz_class )
-
Represents a role.
- name()
-
Returns the name of this role.
- group_name()
-
DEPRECATED.
Use
name
instead. - authz
-
Returns the Tree::Authz subclass used to instantiate this role.
- list_roles
-
Returns a list of roles inherited by this role, including this role.
- setup_permissions( $cando )
-
Instance method.
Adds methods to the class representing the role. $cando is a single method name, or arrayref of method names. No-op methods are added to the class representing the group:
my $spies = $authz->role( 'spies' ); my $cando = [ qw( read_secret wear_disguise ) ]; $spies->setup_permissions( $cando ); if ( $spies->can( 'read_secret' ) ) { warn 'Compromised!'; } warn 'Trust no-one' if $spies->can( 'wear_disguise' );
- setup_abilities( $name => $coderef, [ $name2 => $coderef2 ], ... )
-
Instance method.
Adds methods to the class representing the group. Keys give method names and values are coderefs that will be installed as methods on the group class:
my $spies = $authz->get_group( 'spies' ); my %able = ( read_secret => sub { my ($self, $file) = @_; open( SECRET, $file ); local $/; <SECRET>; }, find_moles => sub { ... }, ); $spies->setup_abilities( %able ); if ( $spies->can( 'read_secret' ) ) { print $spies->read_secret( '/path/to/secret/file' ); } # or if ( my $read = $spies->can( 'read_secret' ) ) { print $spies->$read( '/path/to/secret/file' ); } # with an unknown $group my $get_secret = $group->can( 'read_secret' ) || # spy $group->can( 'steal_document' ) || # mole $group->can( 'create_secret' ) || # spymaster $group->can( 'do_illicit_thing' ) || # politician sub {}; # boring life my $secret = $group->$get_secret;
- setup_plugins( $plugins )
-
Instance method.
Instead of adding a set of coderefs to a group's class, this method adds a class to the
@ISA
array of the group's class.package My::Spies; sub wear_disguise {} sub read_secret { my ($self, $file) = @_; open( SECRET, $file ); local $/; <SECRET>; } package main; my $spies = $authz->get_group( 'spies' ); $spies->setup_plugins( 'My::Spies' ); if ( $spies->can( 'read_secret' ) ) { warn 'Compromised!'; print $spies->read_secret( '/path/to/secret/file' ); } warn 'Trust no-one' if $spies->can( 'wear_disguise' );