1. Go to this page and download the library: Download ac/kalinka library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ac / kalinka example snippets
use AC\Kalinka\Guard\BaseGuard;
abstract class MyAppBaseGuard extends BaseGuard
{
protected function policyAdmin($subject)
{
return $subject->isAdmin();
}
}
class DocumentGuard extends MyAppBaseGuard
{
public function getActions()
{
return ["read", "write"];
}
}
class DocumentGuard extends MyAppBaseGuard
{
public function getActions()
{
return ["read", "write"];
}
protected function policyDocumentOwner($subject, $object)
{
return ($object->getOwnerId() == $subject->getId());
}
protected function policyDocumentUnlocked($subject, $object)
{
return !($object->isLocked());
}
}
use AC\Kalinka\Authorizer\SimpleAuthorizer;
use MyApp\Guards\CommentGuard;
use MyApp\Guards\DocumentGuard;
class MyAppAuthorizer extends SimpleAuthorizer
{
public function __construct($subject)
{
parent::__construct($subject);
$this->registerGuards([
"document" => new DocumentGuard,
"comment" => new CommentGuard,
// ... and so on for all your protected resources
]);
$this->registerPolicies([
"document" => [
"read" => "allow",
"write" => "documentOwner"
],
"comment" => [
"read" => "allow",
"create" => "allow",
"delete" => "admin"
],
// ...
]);
}
}
use MyApp\MyAppAuthorizer;
$auth = new MyAppAuthorizer($currentUser);
if ($auth->can("write", "document", $someDocument)) {
$someDocument->setContent($newValue);
} else {
print "Access denied!\n";
}
use AC\Kalinka\Authorizer\RoleAuthorizer;
use MyApp\Guards\CommentGuard;
use MyApp\Guards\DocumentGuard;
class MyAppAuthorizer extends RoleAuthorizer
{
public function __construct(MyUserClass $user)
{
$roleNames = [];
foreach ($user->getRoles() as $role) {
$roleNames[] = $role->getName();
}
parent::__construct($user, $roleNames);
$this->registerGuards([
"document" => new DocumentGuard,
"comment" => new CommentGuard,
// ... and so on for all your protected resources
]);
$this->registerRolePolicies([
"guest" => [
"document" => [
"read" => "allow",
],
"comment" => [
"read" => "allow",
]
// ...
],
"customer" => [
"document" => [
"read" => "allow",
"write" => [
"documentUnlocked",
"documentOwner"
]
],
"comment" => [
"read" => "allow",
"create" => "allow",
],
// ...
],
// ...
]);
}
}
use AC\Kalinka\Authorizer\RoleAuthorizer;
class MyAppAuthorizer extends RoleAuthorizer
{
public function __construct(MyUserClass $user)
{
// ...
if ($user->isCommentAdmin()) {
$this->registerRoleInclusions([
"comment" => "administrator"
]);
}
}
}