Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Acl/src/View/Helper/AclHelper.php
<?php

namespace Croogo\Acl\View\Helper;

use
Acl\Controller\Component\AclComponent;
use
Cake\Controller\ComponentRegistry;
use
Cake\ORM\TableRegistry;
use
Cake\Utility\Hash;
use
Cake\Utility\Inflector;
use
Cake\View\Helper;
use
Cake\View\View;

/**
 * Acl Helper
 *
 * @category Helper
 * @package  Croogo.Acl
 * @version  1.4
 * @author   Fahad Ibnay Heylaal <contact@fahad19.com>
 * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link     http://www.croogo.org
 */
class AclHelper extends Helper
{

   
/**
     * Cached actions per Role
     *
     * @var array
     * @access public
     */
   
public $allowedActions = [];

   
/**
     * Path Whitelist
     */
   
protected $_pathWhitelist = ['/', '#'];

   
/**
     * Constructor
     */
   
public function __construct(View $View, $settings = [])
    {
       
$this->settings = Hash::merge([
           
'pathWhitelist' => $this->_pathWhitelist
       
], $settings);
       
parent::__construct($View, $settings);
       
$plugin = 'Croogo/Acl';
       
/* TODO: App::uses('AclPermission', $plugin . '.Model'); */
       
$this->Permissions = TableRegistry::get($plugin . '.Permissions');

       
$this->Acl = new AclComponent(new ComponentRegistry());
    }

   
/**
     * Checks whether path is in whitelist
     *
     * @param string $url Path
     * @return bool True if path is in the whitelist
     */
   
protected function _isWhitelist($url)
    {
        return
in_array($url, (array)$this->settings['pathWhitelist']);
    }

   
/**
     * Check if url is allowed for the User
     *
     * @param int $userId User Id
     * @param array|string $url link/url to check
     * @return bool
     */
   
public function linkIsAllowedByUserId($userId, $url)
    {
        if (
is_array($url)) {
            if (isset(
$url['admin']) && $url['admin'] == true && empty($url['prefix'])) {
               
$url['prefix'] = 'admin';
            }
           
$prefix = isset($url['prefix']) ? $url['prefix'] : null;
           
$plugin = empty($url['plugin']) ? null : str_replace('/', '\\', Inflector::camelize($url['plugin'])) . '/';
           
$controller = empty($url['controller']) ? null : $url['controller'];
           
$action = empty($url['action']) ? null : $url['action'];
           
$path = '/:plugin/:prefix/:controller/:action';
           
$path = str_replace(
                [
':plugin/', ':prefix', ':controller', ':action' ],
                [
                   
$plugin,
                   
Inflector::camelize($prefix),
                   
Inflector::camelize($controller),
                   
$action,
                ],
               
'controllers/' . $path
           
);
        } else {
            if (
$this->_isWhitelist($url)) {
                return
true;
            }
           
$path = $url;
        }
       
$linkAction = str_replace('//', '/', $path);

       
// FIXME: need to convert from plain string url to acl format
       
if ($linkAction == '/') {
           
$linkAction = 'controllers/Croogo\\Nodes/Nodes/promoted';
        }
        if (
$linkAction == '/admin') {
           
$linkAction = 'controllers/Croogo\\Dashboards/Admin/Dashboards/dashboard';
        }

       
$userAro = ['model' => 'Users', 'foreign_key' => $userId];
        if (
$this->Acl->check($userAro, $linkAction, '*')) {
            return
true;
        }

        return
false;
    }
}