ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊ ΠΏΡΡΠΌΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½, Π² ΡΠ²ΡΠ·ΠΈ Ρ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ Issues, ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Ρ ΡΠ°ΡΡΠ΅ΡΠΎΠΌ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ.
- ΠΠΎΠ½ΡΠ΅ΠΊΡΡ - ΡΡΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°. (Π§ΡΠΎ?(ΠΠ±ΡΠ΅ΠΊΡ) ΠΡΠΎ?(ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ) ΠΠ°ΡΠ΅ΠΌ?(ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅), ΠΠ΄Π΅?(ΠΠ°Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ))
- ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΉ - ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π²ΠΈΠ΄Ρ ΡΡΠΎ ΡΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΡΠ°Π²ΠΈΠ»Π°, ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΠΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ.
- ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡ - ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ , ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ³ΠΎΠ»ΠΎΠ²Π½ΠΎ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ - ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡ Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
- Π¦Π΅Π»Ρ - ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ Π±Π°ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΠ³ΡΠ΅Π³Π°ΡΠΈΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ Π£ΡΠ»ΠΎΠ²ΠΈΠΉ.
- ΠΡΠ°Π²ΠΈΠ»ΠΎ - ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π£ΡΠ»ΠΎΠ²ΠΈΡ.
- Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ - Π·Π°Π΄Π°Π½Π½Π°Ρ ΡΠ²Π΅ΡΠΊΠ° Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°(ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ) ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΠΎΠ½ΡΠ΅ΠΊΡΡ.
- ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° - ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ ΠΡΠ°Π²ΠΈΠ», ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ Π¦Π΅Π»ΠΈ ΠΊ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ ΠΠ³ΡΠ΅Π³Π°ΡΠΈΡ.
- ΠΡΡΠΏΠΏΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊ - ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ ΠΠΎΠ»ΠΈΡΠΈΠΊ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ Π¦Π΅Π»ΠΈ ΠΊ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ ΠΠ³ΡΠ΅Π³Π°ΡΠΈΡ.
- NOT_APPLICABLE (ΠΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ) - Π£ΡΠ»ΠΎΠ²ΠΈΡ Π¦Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΡΠ°Π²ΠΈΠ» Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ.
- INDETERMINATE (ΠΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ) - ΠΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π²ΡΠ°Ρ Π²ΡΡΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
- PERMIT (Π Π°Π·ΡΠ΅ΡΠΈΡΡ) TRUE - Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
- DENY (ΠΠ°ΡΠ΅ΡΠΈΡΡ) FALSE - ΠΠ°ΠΏΡΠ΅Ρ
ΠΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ PERMIT ΠΈΠ»ΠΈ DENY
-
NOT_APPLICABLE - ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ Ρ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· Π±Π°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°(Π Π°Π·ΡΠ΅ΡΠ°ΡΡΠΈΠΉ(Permit) ΠΈΠ»ΠΈ ΠΠ°ΠΏΡΠ΅ΡΠ°ΡΡΠΈΠΉ(Deny))
-
INDETERMINATE - ΡΠΊΠ»ΠΎΠ½Π΅Π½ ΠΊ ΠΎΡΠΊΠ°Π·Ρ, Ρ.ΠΊ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π²ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΈΠ·Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° ΡΡΠ°ΠΏΠ°Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠ½ΡΡ .
-
NOT_APPLICABLE - ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· NULL Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ.ΠΊ NOT_APPLICABLE ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅)
-
INDETERMINATE - ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
<?php
use Jungle\User\AccessControl\Adapter\PolicyAdater\Memory as MemoryPolicyAdapter;
use Jungle\User\AccessControl\Context;
use Jungle\User\AccessControl\Manager;
use Jungle\User\AccessControl\Matchable;
include './loader.php';
$manager = new Manager();
$resolver = new Matchable\Resolver\ConditionResolver();
$manager->setConditionResolver($resolver);
// .........$combiner_set declaration
$manager->setCombiner('delegate', new Matchable\Combiner($combiner_set['delegate']));
$manager->setCombiner('delegate_same', new Matchable\Combiner($combiner_set['delegate_same']));
$manager->setCombiner('same', new Matchable\Combiner($combiner_set['same']));
$manager->setCombiner('same_only', new Matchable\Combiner($combiner_set['same_only']));
$manager->setCombiner('same_by_same', new Matchable\Combiner($combiner_set['same_by_same']));
$manager->setCombiner('permit_by_permit', new Matchable\Combiner($combiner_set['permit_by_permit']));
$manager->setCombiner('deny_by_deny', new Matchable\Combiner($combiner_set['deny_by_deny']));
$manager->setCombiner('dispute', new Matchable\Combiner($combiner_set['dispute']));
$manager->setCombiner('dispute_all', new Matchable\Combiner($combiner_set['dispute_all']));
$manager->setDefaultCombiner('dispute_all');
$manager->setMainCombiner('dispute_all');
$manager->setDefaultEffect(Matchable::PERMIT);
$manager->setSameEffect(Matchable::DENY);
// .........$aggregator main declaration
// ............$context main declaration
$manager->setAggregator($aggregator);
$manager->setContext($context);
$aggregator = new MemoryPolicyAdapter(null);
$aggregator->build([
'policies' => [[
'effect' => true,
'name' => 'Π Π°Π±ΠΎΡΠ° Ρ ΠΠ°ΠΏΠΈΡΠΊΠ°ΠΌΠΈ',
'target' => [
'all_of' => '[object::class] = Note',
],
'combiner' => 'delegate',
'rules' => [[
'condition' => '[user.group] = Administrators'
],[
'condition' => '[object.owner_id] = [user.id]'
],[
'condition' => '[object.public] = true'
]]
],[
'effect' => true,
'name' => 'ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ',
'combiner' => 'dispute',
'obligation' => function(){
echo 'ΠΡΠ΅Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½Π½ΡΠ΅ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ';
},
'target' => [
'all_of' => [
'[user.group] = Administrators',
]
],
],[
'effect' => false,
'name' => 'ΠΠ½ΠΎΠ½ΠΈΠΌΡ',
'combiner' => 'dispute',
'target' => [
'all_of' => [
'[object::class] = Document',
'[user.group] = Anonymous',
]
],
'obligation' => function(){
echo 'ΠΡ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π΄Π΅ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ°ΠΌ';
},
'policies' => [[
'effect' => true,
'rules' => [[
'condition' => '[action.name] = Read'
]],
'obligation' => function(){
echo 'ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ';
},
],[
'effect' => true,
'rules' => [[
'condition' => '[scope.time.week_day] in [TIME.WORK_DAYS]'
]],
'obligation' => function(){
echo 'Π‘Π»Π°Π²Π° Π±ΠΎΠ³Ρ Π±ΡΠ΄Π½ΠΈΠ΅ Π΄Π½ΠΈ';
},
]],
],[
'effect' => false,
'name' => 'CurrentToken',
'obligation' => function(){
echo 'ΠΠΎ ΡΠΎΠΊΠ΅Π½Ρ ΠΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ';
},
'combiner' => 'same_by_same',
'policies' => [[
'effect' => true,
'target' => [ 'all_of' => [ '[user.group] = Administrators', ], ],
'obligation' => function(){
echo 'ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ';
},
],[
'effect' => true,
'target' => [ 'all_of' => [ '[action.name] = Read', ], ],
'obligation' => function(){
echo 'ΠΡΠΎΡΠΌΠΎΡΡ Π΄Π»Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ΅Π½';
},
],[
'effect' => true,
'combiner' => 'same_by_same',
'rules' => [[ 'condition' => '[scope.time.week_day] in [TIME.WORK_DAYS]' ]],
'obligation' => function(){
echo 'Π ΡΠ°Π±ΠΎΡΠΈΠ΅ Π΄Π½ΠΈ ΡΠΎΠΊΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ';
},
]],
],[
'name' => 'Deny',
'effect' => false,
'target' => [
'all_of' => [
'[user.group] != Administrators'
]
],
'obligation' => function(){
echo 'Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ';
},
]]
]);
$context = new Context();
$context->setProperties([
'user' => [
'id' => 1,
'name' => 'John',
'login' => 'john.mail@site.com',
'group' => 'Anonymous',
'email' => 'john.mail@site.com',
'photo' => '/user/123223/avatar.jpg'
],
'route' => [
'module' => null,
'controller' => null,
'action' => null,
'params' => null
],
'client' => [
'request' => & $_REQUEST,
'server' => & $_SERVER,
'cookies' => & $_COOKIE,
'session' => & $_SESSION
]
], true);
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΡΡΠΏΡΠ»Π΅Π·Π½ΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΡΡΠ΅ΠΊΡΠ΅.
ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ, ΡΡΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΡΡΠΈΡΠ»ΡΡΡΠΈΡ
- Π.
delegate
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡΠ° - Π.
delegate_same
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ [A], Π½ΠΎ ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠΌ, ΠΏΡΠΈ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ , Π΅Π³ΠΎ ΡΡΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ΅. - Π.
same_only
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡΠ° Π΅ΡΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 1 Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠ°Π²Π΅Π½ ΠΡΡΠ΅ΠΊΡΡ ΠΠ³ΡΠ΅Π³Π°ΡΠΎΡΠ°, ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ - Π.
same_soft
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ [Π], Π½ΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠ΅
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠΆΠΈΡΡΡ Π½Π° ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΅Π³ΠΎ Π Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ΅Π°ΠΊΡΠΈΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΡΠ΅ Π²ΡΠ΄Π°ΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ
Π Π΅Π°ΠΊΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ "ΠΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΡ "
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ "ΠΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ "
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ "Π Π°Π·ΡΠ΅ΡΠ°ΡΡΠΈΡ "
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ "ΠΠ°ΠΏΡΠ΅ΡΠ°ΡΡΠΈΡ "
ΠΠ»Π΅ΠΉΡΡ ΠΎΠ»Π΄Π΅ΡΡ:
{same}
- ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°{!same}
- ΠΡΠ»ΠΈ Π½Π΅ ΡΠ°Π²Π½ΠΎ ΡΡΡΠ΅ΠΊΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°{current}
- ΠΡΡΠ΅ΠΊΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°:
-
default
- ΠΡΡΠ΅ΠΊΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠΌ ΠΏΠ»Π°Π²ΠΈΠ» Π² ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ -
empty
- ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΡΡΠ°Ρ ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» -
applicable
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ applicable ΠΠ»Π΅ΠΌΠ΅Π½ΡΠ΅check
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΠ‘ΠΠcheck
- ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ switch case case case- Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π°(ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠ°ΠΊ ΠΈ
applicable
)
- Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π°(ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠ°ΠΊ ΠΈ
early
- ΠΠ°ΠΊΠΎΠ½ΡΠΈΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡeffect
- ΠΡΡΡΠ°Π²ΠΈΡΡ ΡΡΡΠ΅ΠΊΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ{current}
-
not_applicable
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ not_applicable (ΠΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΈapplicable
) -
deny
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ deny ΠΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ (ΠΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΈapplicable
) -
permit
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ permit ΠΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ (ΠΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΈapplicable
)
ΠΡΠΈΠΌΠ΅Ρ:
$combiner_set = [
'delegate' => [
'default' => 'not_applicable',
'applicable' => [
'early' => true,
'effect' => '{current}'
],
],
'delegate_same' => [
'default' => '{same}',
'applicable' => [
'early' => true,
'effect' => '{current}'
],
],
'dispute' => [
'default' => '{same}',
'empty' => '{same}',
'applicable' => [
'check' => '{!same}',
'early' => true,
'effect' => '{current}'
],
],
'dispute_all' => [
'default' => '{same}',
'empty' => '{same}',
'applicable' => [
'check' => [[
'check' => '{!same}',
'effect' => '{current}'
],[
'check' => '{same}',
'early' => true,
'effect' => '{current}'
]]
],
],
'permit_by_permit' => [
'return_only' => 'permit',
'default' => 'not_applicable',
'empty' => 'not_applicable',
'deny' => [
'early' => true,
'effect' => 'not_applicable'
],
'permit' => [
'effect' => '{current}'
],
],
'deny_by_deny' => [
'return_only' => 'deny',
'default' => 'not_applicable',
'empty' => 'not_applicable',
'deny' => [
'effect' => '{current}'
],
'permit' => [
'early' => true,
'effect' => 'not_applicable'
],
],
'same_by_same' => [
'default' => 'not_applicable',
'empty' => 'not_applicable',
'applicable' => [
'check' => [[
'check' => '{!same}',
'early' => true,
'effect' => 'not_applicable'
],[
'check' => '{same}',
'effect' => '{same}'
]]
],
],
'same' => [
'default' => '{same}',
'empty' => '{same}',
'applicable' => [
'check' => '{!same}',
'early' => true,
'effect' => '{current}'
],
],
'same_only' => [
'default'=> '{same}',
'not_applicable' => [
'effect' => '{current}'
],
'applicable' => [
'check' => '{!same}',
'early' => true,
'effect' => '{current}'
]
],
];
ΠΡΠΈΠ½ΡΠΈΠΏ Π±ΡΠ» ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½, ΠΏΠ΅ΡΠ΅ΠΎΡΠΌΡΡΠ»Π΅Π½ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅
ABAC ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, Π΄ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°ΠΊΠΎΠ²ΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ WHERE ΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ABAC ΠΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠ±ΠΎΡΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ Π½ΡΠΆΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΡΠ΅ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠ±ΠΎΡΠ° ΠΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠ² ΠΈΠ· Π£ΡΠ»ΠΎΠ²ΠΈΠΉ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ.
$object = new Context\ObjectAccessor([
'class' => 'Note',
'phantom' => [
'owner_id' => 2,
],
'predicate_effect' = true,
]);
$result = $manager->enforce('Read',$object, true);
if($result->isAllowed() === $object->getPredicateEffect()){
echo '<p><pre>';
var_dump($object->getSelectConditions());
echo '</pre></p>';
}else{
echo '<p><pre>';
var_dump($result->getEffect());
echo '</pre></p>';
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ WHERE ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°:
array(3) {
[0]=>
array(3) {
[0]=>
string(6) "public"
[1]=>
string(1) "="
[2]=>
bool(true)
}
[1]=>
string(3) "AND"
[2]=>
array(1) {
[0]=>
array(3) {
[0]=>
string(8) "owner_id"
[1]=>
string(1) "="
[2]=>
int(2)
}
}
}