Skip to content

Commit

Permalink
Allow disable acl check from method on normal mode or env var on cli …
Browse files Browse the repository at this point in the history
…mode.Fixes.
  • Loading branch information
vasiliishvakin committed Aug 3, 2017
1 parent dc43efd commit 5cfe8f7
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 11 deletions.
32 changes: 32 additions & 0 deletions src/AccessCheckIncludeTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ trait AccessCheckIncludeTrait
/** @var AccessCheckInterface */
protected $aclManager;

/** @var bool */
protected $disabledAccessCheck = false;

/**
* @return AccessCheckInterface
*/
Expand All @@ -26,8 +29,37 @@ public function setAclManager(AccessCheckInterface $aclManager)
$this->aclManager = $aclManager;
}

/**
* @return bool
*/
public function isDisabledAccessCheck()
{
return $this->disabledAccessCheck;
}

/**
* @param bool $disableAccessCheck
*/
public function setDisabledAccessCheck($disableAccessCheck)
{
$this->disabledAccessCheck = $disableAccessCheck;
}

public function disabledAccessCheck()
{
$this->setDisabledAccessCheck(true);
}

public function enableAcessCheck()
{
$this->setDisabledAccessCheck(false);
}

public function accessCheck($resource = null, UserInterface $owner = null, GroupInterface $group = null, UserInterface $user = null)
{
if ($this->isDisabledAccessCheck()) {
return true;
}
return $this->getAclManager()->accessCheck($resource, $owner, $group, $user);
}
}
6 changes: 5 additions & 1 deletion src/AclManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Akademiano\Acl\Adapter\AdapterInterface;
use Akademiano\Acl\Adapter\DenyAdapter;
use Akademiano\Acl\Adapter\XAclAdapter;
use Akademiano\HttpWarp\Request;
use Akademiano\User\AuthInterface;
use Akademiano\Entity\UserInterface;
Expand Down Expand Up @@ -74,12 +75,15 @@ public function setRequest($request)

public function getResource()
{
$resource = (string)$this->getRequest()->getUrl()->getPath();
$resource = XAclAdapter::prepareResource((string)$this->getRequest()->getUrl()->getPath());
return $resource;
}

public function accessCheck($resource = null, UserInterface $owner = null, GroupInterface $group = null, UserInterface $user = null)
{
if (php_sapi_name() === "cli" && getenv("AKADEMIANO_NO_ACL_CHECK", true) == 1) {
return true;
}
if (null === $resource) {
$resource = $this->getResource();
}
Expand Down
4 changes: 2 additions & 2 deletions src/Adapter/RegisteredAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Akademiano\Entity\UserInterface;


class RegisteredAdapter extends XAclAdapterInterface implements AdapterInterface
class RegisteredAdapter extends XAclAdapter implements AdapterInterface
{
protected $patches;

Expand Down Expand Up @@ -39,7 +39,7 @@ public function getPatches()

public function accessCheck($resource, UserInterface $owner = null, GroupInterface $group, UserInterface $user = null)
{
$resource = $this->prepareResource($resource);
$resource = static::prepareResource($resource);
$char = mb_strcut($resource, 0, 1);
$resource = explode(":", $resource);
$patches = $this->getPatches();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Akademiano\Entity\GroupInterface;
use Akademiano\Entity\UserInterface;

class XAclAdapterInterface implements AdapterInterface, FileBasedAdapterInterface
class XAclAdapter implements AdapterInterface, FileBasedAdapterInterface
{
const DATA_DIR_NAME = "acl";
const DATA_ROOT_DIR_NAME = "data";
Expand Down Expand Up @@ -98,7 +98,7 @@ public function mergeFiles($files)
{
$fileName = "";
foreach ($files as $file) {
$file = (string) $file;
$file = (string)$file;
if (is_readable($file)) {
$fileName .= $file . "-" . filemtime($file);
}
Expand Down Expand Up @@ -129,10 +129,13 @@ public function getAclFile()
return $this->aclFile;
}

public function prepareResource($resource)
public static function prepareResource($resource)
{
$resource = trim(trim($resource, "/"));
$resource = strtr($resource, "\\", "/");
$resource = strtr($resource, "/", ":");
$resource = strtolower($resource);

if ($resource === "") {
$resource = self::ROOT_RESOURCE_PATH;
}
Expand All @@ -142,10 +145,10 @@ public function prepareResource($resource)

public function accessCheck($resource, UserInterface $owner = null, GroupInterface $group, UserInterface $user = null)
{
$resource = $this->prepareResource($resource);
$resource = static::prepareResource($resource);
$params = [
"-c" => $this->getAclFile(),
"-g" => $group->getId(),
"-g" => $group->getTitle(),
"-r" => $resource,
"-u" => ($user instanceof UserInterface) ? $user->getId() : null,
"-o" => ($owner instanceof UserInterface) ? $owner->getId() : null,
Expand Down
3 changes: 0 additions & 3 deletions src/config/resources.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
$adapterName = $config->get(["acl", "adapter"], "Akademiano\\Acl\\Adapter\\AllowAdapter");
/** @var \Akademiano\Acl\Adapter\AdapterInterface $adapter */
$adapter = new $adapterName;
if ($adapter instanceof \Akademiano\Config\ConfigurableInterface) {
$adapter->setConfig($config);
}

if ($adapter instanceof \Akademiano\Acl\Adapter\FileBasedAdapterInterface) {
/** @var \Akademiano\Config\ConfigLoader $configLoader */
Expand Down

0 comments on commit 5cfe8f7

Please sign in to comment.