Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/js/jodit/connector/vendor/jodit/application/src/AccessControl.php
<?php

namespace Jodit;

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
AccessControl {
    private
$accessList = [];
    static private
$defaultRule = [
       
'role'                => '*',

       
'extensions'          => '*',
       
'path'                => '/',

       
'FILES'               => true,
       
'FILE_MOVE'           => true,
       
'FILE_UPLOAD'         => true,
       
'FILE_UPLOAD_REMOTE'  => true,
       
'FILE_REMOVE'         => true,
       
'FILE_RENAME'         => true,

       
'FOLDERS'             => true,
       
'FOLDER_MOVE'         => true,
       
'FOLDER_REMOVE'       => true,
       
'FOLDER_RENAME'       => true,

       
'IMAGE_RESIZE'        => true,
       
'IMAGE_CROP'          => true,
    ];

   
/**
     * @param array $list
     */
   
public function setAccessList($list) {
       
$this->accessList = $list;
    }

   
/**
     * @param {string} $role
     * @param {string} $action
     */
   
public function checkPermission($role, $action, $path = '/', $fileExtension = '*') {
       
$action = Helper::Upperize($action);

       
$allow = null;

        foreach (
$this->accessList as $rule) {
            if (!isset(
$rule['role']) or $rule['role'] === '*' or $rule['role'] === $role) {

                if (isset(
$rule['path'])) {
                    if (
strpos($path, $rule['path']) !== 0) {
                        continue;
                    }
                }

                if (isset(
$rule['extensions'])) {
                   
$allowExtensions = ['*'];
                    if (
is_string($rule['extensions'])) {
                       
$rule['extensions'] = preg_split('#[,\s]+#', $rule['extensions']);
                    }

                    if (
is_array($rule['extensions'])) {
                       
$allowExtensions =  array_map(['\Jodit\Helper', 'Upperize'], $rule['extensions']);
                    }

                    if (
is_callable($rule['extensions'])) {
                       
$allowExtensions =  call_user_func_array($rule['extensions'], [$action, $rule, $path, $fileExtension]);
                    }

                    if (!(
in_array('*', $allowExtensions) or in_array(strtoupper($fileExtension), $allowExtensions))) {
                        continue;
                    }
                }

                if (isset(
$rule[$action])) {
                    if (
is_callable($rule[$action])) {
                       
$allow = call_user_func_array($rule[$action], [$action, $rule, $path, $fileExtension]);
                    } else {
                       
$allow = is_bool($rule[$action]) ? $rule[$action] : true;
                    }
                }
            }
        }

        if (
$allow === null) {
           
$allow = isset(static::$defaultRule[$action]) ? static::$defaultRule[$action] : true;
        }

        if (
$allow === false) {
            throw new \
Exception('Access denied', 403);
        }

        return
true;
    }
}