diff Lib/IMPL/Security/Role.pm @ 230:6d8092d8ce1b

*reworked IMPL::Security *reworked IMPL::Web::Security *refactoring
author sergey
date Mon, 08 Oct 2012 03:37:37 +0400
parents 4d0e1962161c
children 69a1f1508696
line wrap: on
line diff
--- a/Lib/IMPL/Security/Role.pm	Sat Sep 29 02:34:47 2012 +0400
+++ b/Lib/IMPL/Security/Role.pm	Mon Oct 08 03:37:37 2012 +0400
@@ -1,13 +1,22 @@
 package IMPL::Security::Role;
+use strict;
 
-use parent qw(IMPL::Object);
+use IMPL::require {
+    AbstractRole => 'IMPL::Security::AbstractRole'    
+};
 
-use IMPL::Class::Property;
+use IMPL::declare {
+    base => [
+        'IMPL::Object' => undef,
+        'IMPL::Security::AbstractRole' => undef 
+    ],
+    props => [
+        @{AbstractRole->abstractProps()}
+    ]
+};
 
-BEGIN {
-    public property roleName => prop_get | owner_set;
-    public property parentRoles => prop_get | owner_set | prop_list;
-}
+__PACKAGE__->abstractProps([]);
+
 
 sub CTOR {
     my ($this,$name,$parentRoles) = @_;
@@ -16,24 +25,6 @@
     $this->parentRoles($parentRoles) if $parentRoles;
 }
 
-sub Satisfy {
-    my ($this,@roles) = @_;    
-    
-    return 1 unless $this->_FilterRoles( @roles );
-    return 0;
-}
-
-sub _FilterRoles {
-    my ($this,@roles) = @_;
-    
-    @roles = grep not (ref $_ ? $this == $_ : $this->roleName eq $_), @roles;
-    
-    @roles = $_->_FilterRoles(@roles) or return foreach $this->parentRoles ;
-    
-    return @roles;
-}
-
-
 1;
 
 __END__
@@ -42,31 +33,33 @@
 
 =head1 NAME
 
-C<IMPL::Security::Role> Роль
+C<IMPL::Security::Role> - стандартная реализация роли безопасности.
+
+=head1 SYNOPSIS
+
+=begin code
+
+# create the megarole
+my $role = IMPL::Security::Role->new(megarole => [ $adminRole, $directorRole ] );
+
+#use it in context
+my $context = IMPL::Security::Context->new(
+    principal => $user,
+    assignedRoles => [$user->roles, $megarole]
+);
+
+$context->Impersonate( sub {
+    # do something forbidden
+});
+
+=end code
 
 =head1 DESCRIPTION
 
-Может включать в себя базовые роли.
-Имеется метод для проверки наличия необходимых ролей в текущей роли.
-
-=head1 MEMBERS
-
-=over
-
-=item C<[get] roleName>
-
-Имя роли, ее идентификатор
+Позволяет создавать объекты ролей без привязки к источникам данных и модулям
+авторизации. Чаще всего используется при реализации каких либо механизмов
+безопасности, где требуется создать временную роль.
 
-=item C<[get,list] parentRoles>
-
-Список родительских ролей
-
-=item C<Satisfy(@roles_list)>
+C<IMPL::Security::AbstractRole>
 
-Проверяет наличие ролей указанных ролей из списка @roles_list.
-Допускается использование как самих объектов, так и имен ролей.
-Возвращает 0 в случае неудачи (хотябы одна роль не была удовлетворена), 1 при наличии необходимых ролей.
-
-=back
-
-=cut
+=cut
\ No newline at end of file