Bivio::Auth::RealmType
# Copyright (c) 1999-2009 bivio Software, Inc. All rights reserved.
# $Id$
package Bivio::Auth::RealmType;
use strict;
use Bivio::Base 'Type.EnumDelegator';
__PACKAGE__->compile;
my($_S) = b_use('Type.String');
my($_MIN) = b_use('Type.PrimaryId')->get_min;
sub as_default_owner_id {
return shift->as_int;
}
sub as_default_owner_name {
return lc(shift->get_name);
}
sub as_property_model_class_name {
return $_S->to_camel_case_identifier(shift->get_name);
}
sub equals_or_any_owner_check {
my($self, $match) = @_;
$match ||= $self->ANY_OWNER;
return $self == $match
|| $match->eq_any_owner && grep($self == $_, $self->get_any_owner_list)
? 1 : 0;
}
sub get_any_group_list {
return grep($_->is_group, shift->get_non_zero_list);
}
sub get_any_owner_list {
return grep($_->is_owner, shift->get_non_zero_list);
}
sub is_default_id {
my($proto, $id) = @_;
return $id
&& $id < $_MIN
&& ($proto->unsafe_from_int($id) || return 0)->as_int
? 1 : 0;
}
sub is_group {
return shift->equals_by_name(qw(USER GENERAL)) ? 0 : 1;
}
sub is_owner {
return shift->equals_by_name(qw(GENERAL)) ? 0 : 1;
}
sub self_or_any_group {
my($self) = @_;
# This is a bit subtle. self_or_any_group means to match any_owner tasks
# if $self is any_owner, return groups without user.
return [$self->eq_any_owner ? $self->get_any_group_list : $self];
}
1;