zfs-rbac
ΠΠ±Π΅ΡΡΠΊΠ° Π½Π° Zf2\Rbac Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ZF2/ZFStarter ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
, (*1)
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘Π΅ΡΠ²ΠΈΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ Π² ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΠΏΠΎΡΠΎΠΌΡ Π²Π°ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ Π»ΠΈΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΈΠΌΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² application.config.php:, (*2)
'modules' => array(
'ZFS\Rbac', // <--
'Application'
),
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠΎΠ±ΡΡΠΈΡ
ΠΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΡΠ²ΠΈΡ ZFS\Rbac\Rbac, ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ isGranted ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° isGranted., (*3)
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΎΠ½ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ 2 ΡΠΎΠ±ΡΡΠΈΡ:
- EVENT_GET_CONFIG (ZFS\Rbac\Service\Event\GetConfig)
- EVENT_GET_USER_ROLES (ZFS\Rbac\Service\Event\GetUserRoles), (*4)
EVENT_GET_CONFIG ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΎΠ»Π΅ΠΉ ΠΈ ΠΈΡ
ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π²ΡΠΈΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅:, (*5)
$this->getEventManager()->getSharedManager()->attach(
ZFS\Rbac\Rbac::EVENT_MANAGER_IDENTIFIER,
ZFS\Rbac\Rbac::EVENT_GET_CONFIG,
function () {
return array(
'user' => array(
'permissions' => array(
'login'
)
),
'users_manager' => array(
'permissions' => array(
'modify_users'
)
),
'admin' => array(
'children' => array(
'users_manager'
)
)
);
}
);
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΠΎΠ»Π΅ΠΉ (ΠΊΠ»ΡΡ) ΠΈ Π΅Π³ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅). Π‘ΡΠ΅Π΄ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΠ°ΠΌΠΈΡ
ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ (ΠΊΠ»ΡΡ permissions) ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ
ΡΠΎΠ»Π΅ΠΉ (ΠΊΠ»ΡΡ children)., (*6)
EVENT_GET_USER_ROLES ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ»Π΅ΠΉ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π²ΡΠΈΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅:, (*7)
$this->getEventManager()->getSharedManager()->attach(
ZFS\Rbac\Rbac::EVENT_MANAGER_IDENTIFIER,
ZFS\Rbac\Rbac::EVENT_GET_USER_ROLES,
function () {
return array('admin');
}
);
ΠΠ±Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ: Π²ΡΠ±ΠΈΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΠ, ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π»Π΅ΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ., (*8)
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
- Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅:
class IndexController extends AbstractActionController
{
public function indexAction()
{
if (!$this->isGranted('index_action')) {
return $this->notFoundAction();
}
/* ... */
}
}
- Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ:
<?php if ($this->isGranted('buy')): ?>
<a href="/buy">Buy</a>
<?php else: ?>
<a href="/login">Login to buy</a>
<?php endif; ?>
- Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ, Π³Π΄Π΅ Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ
ServiceLocator:
$this->getServiceLocator()->get('ZFS\Rbac\Rbac')->isGranted('some_permission');
ΠΠΎ Π²ΡΠ΅Ρ
ΡΡΠ΅Ρ
ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΠΌΠ΅ΡΠΎΠ΄ isGranted ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΡΠΎΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠΌΡΠ½ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π±ΡΠ»Π΅Π²ΡΠΉ ΡΠ»Π°Π³, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠΎΠ±ΡΡΠΈΡ EVENT_GET_USER_ROLES. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎΠΈΡ Π² false., (*9)
ΠΠΈΡΠ΅Π½Π·ΠΈΡ
MIT, (*10)