szurubooru/src/Helpers/PrivilegesHelper.php

98 lines
2.5 KiB
PHP
Raw Normal View History

2013-10-06 13:21:16 +02:00
<?php
class PrivilegesHelper
{
private static $privileges = [];
public static function init()
{
2013-10-07 23:17:33 +02:00
self::$privileges = [];
2014-04-29 21:35:29 +02:00
foreach (getConfig()->privileges as $key => $minAccessRankName)
2013-10-06 13:21:16 +02:00
{
2013-10-07 23:17:33 +02:00
if (strpos($key, '.') === false)
$key .= '.';
2013-10-18 00:09:50 +02:00
list ($privilegeName, $subPrivilegeName) = explode('.', $key);
2014-04-12 16:22:30 +02:00
$privilegeName = TextCaseConverter::convert($privilegeName,
TextCaseConverter::CAMEL_CASE,
TextCaseConverter::SPINAL_CASE);
$subPrivilegeName = TextCaseConverter::convert($subPrivilegeName,
TextCaseConverter::CAMEL_CASE,
TextCaseConverter::SPINAL_CASE);
2013-10-18 00:09:50 +02:00
$key = rtrim($privilegeName . '.' . $subPrivilegeName, '.');
2013-10-07 23:17:33 +02:00
2013-10-06 13:21:16 +02:00
$minAccessRank = TextHelper::resolveConstant($minAccessRankName, 'AccessRank');
2013-10-07 23:17:33 +02:00
self::$privileges[$key] = $minAccessRank;
if (!isset(self::$privileges[$privilegeName]) or
self::$privileges[$privilegeName] > $minAccessRank)
{
self::$privileges[$privilegeName] = $minAccessRank;
}
2013-10-06 13:21:16 +02:00
}
}
2013-10-18 00:09:50 +02:00
public static function confirm($privilege, $subPrivilege = null)
2013-10-06 13:21:16 +02:00
{
if (php_sapi_name() == 'cli')
return true;
2014-04-29 21:35:29 +02:00
$user = getContext()->user;
2013-10-07 23:17:33 +02:00
$minAccessRank = AccessRank::Admin;
2014-04-12 16:22:30 +02:00
$key = TextCaseConverter::convert(Privilege::toString($privilege),
TextCaseConverter::CAMEL_CASE,
TextCaseConverter::SPINAL_CASE);
2013-10-07 23:17:33 +02:00
if (isset(self::$privileges[$key]))
{
$minAccessRank = self::$privileges[$key];
}
2013-10-18 00:09:50 +02:00
if ($subPrivilege != null)
2013-10-07 23:17:33 +02:00
{
2013-10-18 00:09:50 +02:00
$key2 = $key . '.' . strtolower($subPrivilege);
2013-10-07 23:17:33 +02:00
if (isset(self::$privileges[$key2]))
{
$minAccessRank = self::$privileges[$key2];
}
}
return intval($user->accessRank) >= $minAccessRank;
2013-10-06 13:21:16 +02:00
}
2013-10-18 00:09:50 +02:00
public static function confirmWithException($privilege, $subPrivilege = null)
2013-10-06 13:21:16 +02:00
{
2013-10-18 00:09:50 +02:00
if (!self::confirm($privilege, $subPrivilege))
2013-10-06 13:21:16 +02:00
throw new SimpleException('Insufficient privileges');
}
2013-10-16 18:07:23 +02:00
2013-10-18 00:09:50 +02:00
public static function getIdentitySubPrivilege($user)
{
if (!$user)
return 'all';
2014-04-29 21:35:29 +02:00
$userFromContext = getContext()->user;
2013-10-18 00:09:50 +02:00
return $user->id == $userFromContext->id ? 'own' : 'all';
}
2013-10-16 18:07:23 +02:00
public static function confirmEmail($user)
{
if (!$user->emailConfirmed)
2013-10-16 18:07:23 +02:00
throw new SimpleException('Need e-mail address confirmation to continue');
}
2013-10-30 16:22:46 +01:00
public static function getAllowedSafety()
{
if (php_sapi_name() == 'cli')
return PostSafety::getAll();
2014-04-29 21:35:29 +02:00
$context = getContext();
2013-10-30 16:22:46 +01:00
return array_filter(PostSafety::getAll(), function($safety) use ($context)
{
return PrivilegesHelper::confirm(Privilege::ListPosts, PostSafety::toString($safety)) and
$context->user->hasEnabledSafety($safety);
});
}
2013-10-06 13:21:16 +02:00
}
PrivilegesHelper::init();