| Server IP : 46.105.57.169 / Your IP : 216.73.217.8 Web Server : Apache System : Linux webd003.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : maitricfuz ( 93378) PHP Version : 8.4.22 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/maitricfuz/www/saint-martin-lg/plugins/system/sourcerer/src/ |
Upload File : |
<?php
/**
* @package Sourcerer
* @version 13.0.2
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2026 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Plugin\System\Sourcerer;
defined('_JEXEC') or die;
use RegularLabs\Library\User as RL_User;
class Security
{
protected static $security = null;
public static function get(): object
{
if ( ! is_null(self::$security))
{
return self::$security;
}
self::$security = self::getForArea('other');
return self::$security;
}
public static function getForArea(string $area): object
{
$pass_php = true;
$security = (object) [
'pass' => true,
'pass_css' => true,
'pass_js' => true,
'pass_php' => $pass_php,
];
return $security;
}
public static function getForArticle(object|false|null $article = null): object
{
$security = self::getForArea('articles');
if ( ! isset($article->created_by))
{
return $security;
}
$creator_id = (int) $article->created_by;
$modifier_id = (int) ($article->modified_by ?? 0);
$creator_is_admin = $creator_id > 0 && RL_User::isAdministrator($creator_id);
$modifier_is_admin = $modifier_id < 1
|| $modifier_id === $creator_id
|| RL_User::isAdministrator($modifier_id);
$article_is_admin = $creator_is_admin && $modifier_is_admin;
$security = (object) [
'pass' => true,
'pass_css' => true,
'pass_js' => true,
'pass_php' => $article_is_admin,
];
return $security;
}
public static function set(object|false|null $article = null): void
{
self::$security = self::getForArticle($article);
}
private static function getGroups(int $user_id): array
{
if ($user_id < 1)
{
return [-1];
}
return [-1, ...RL_User::getAuthorisedGroups($user_id)];
}
private static function passesSecurityLevels(
array $security_levels,
array $creator_groups,
array $modifier_groups
): bool
{
return ! empty(array_intersect($security_levels, $creator_groups))
&& ! empty(array_intersect($security_levels, $modifier_groups));
}
}