%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/BasePermission.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\libs;
use humhub\modules\space\models\Space;
use humhub\modules\user\models\User;
use Yii;
use yii\base\BaseObject;
use yii\base\Event;
use yii\base\Exception;
/**
* BasePermission
* @author luke
*/
class BasePermission extends BaseObject
{
/**
* @event Event an event that is triggered when the permission is initialized via [[init()]].
*/
const EVENT_INIT = 'init';
/**
* Permission States
*/
const STATE_DEFAULT = '';
const STATE_ALLOW = 1;
const STATE_DENY = 0;
/**
* @var string id of the permission (default is classname)
*/
protected $id;
/**
* @var string title of the permission
*/
protected $title ='';
/**
* @var string description of the permission
*/
protected $description = '';
/**
* @var string module id which belongs to the permission
*/
protected $moduleId = '';
/**
* A list of groupIds which allowed per default.
*
* @var array default allowed groups
*/
protected $defaultAllowedGroups = [
Space::USERGROUP_OWNER,
Space::USERGROUP_ADMIN,
];
/**
* A list of groupIds which are fixed group state.
* See defaultState for default setting.
*
* @var array default fixed groups
*/
protected $fixedGroups = [
Space::USERGROUP_GUEST,
Space::USERGROUP_OWNER,
Space::USERGROUP_ADMIN,
];
/**
* The default state of this permission
*
* @var string
*/
protected $defaultState = self::STATE_DENY;
/**
* Optional contentContainer instance to improve title and description.
*
* @since 1.2
* @var \humhub\modules\content\components\ContentContainerActiveRecord
*/
public $contentContainer = null;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
Event::trigger($this, self::EVENT_INIT);
}
/**
* Returns the ID
*
* @return string the id of the permission
*/
public function getId()
{
if ($this->id != '') {
return $this->id;
}
return $this->className();
}
/**
* Returns the title
*
* @return string the title of the permission
*/
public function getTitle()
{
return $this->title;
}
/**
* Returns the description
*
* @return string the description of the permission
*/
public function getDescription()
{
return $this->description;
}
/**
* Returns the module id
*
* @return string the moduleid of the permission
*/
public function getModuleId()
{
return $this->moduleId;
}
/**
* Returns the default state of the permission.
* The defaultState is either defined by setting $defaultState attribute
* or by overwriting the $defaultState by means of the configuration param 'defaultPermissions'.
*
* If the $defaultState is set to denied, we can grant the permission for specific groups by defining
* the $defaultAllowedGroups array.
*
* @return int the default state
*/
public function getDefaultState($groupId)
{
$configuredState = $this->getConfiguredState($groupId);
if ($configuredState !== null) {
return $configuredState;
}
if ($this->defaultState == self::STATE_ALLOW) {
return self::STATE_ALLOW;
}
return (int) (in_array($groupId, $this->defaultAllowedGroups));
}
/**
* Returns the default state set in the configration params 'defaultPermissions'.
* This method returns null in case the default state for this permission or group is not set in
* the configuration.
*
* @param int $groupId
* @return int|null
* @since 1.2
*/
protected function getConfiguredState($groupId)
{
if(!isset(Yii::$app->params['defaultPermissions'][static::class])) {
return null;
}
if (isset(Yii::$app->params['defaultPermissions'][static::class][$groupId])) {
return Yii::$app->params['defaultPermissions'][static::class][$groupId];
}
// Allow asterisk to overwrite all groups excluding guest groups
if (isset(Yii::$app->params['defaultPermissions'][static::class]['*'])
&& !in_array($groupId, [Space::USERGROUP_GUEST, User::USERGROUP_GUEST], true)) {
return Yii::$app->params['defaultPermissions'][static::class]['*'];
}
return null;
}
/**
* Checks if permission state can be changed
*
* @return boolean
*/
public function canChangeState($groupId)
{
return (!in_array($groupId, $this->fixedGroups));
}
/**
* Checks the given id belongs to this permission
*
* @return boolean
*/
public function hasId($id)
{
return ($this->getId() == $id);
}
/**
* Returns the label for given State
*
* @return string the label
* @throws Exception
*/
public static function getLabelForState($state)
{
if ($state === self::STATE_ALLOW) {
return Yii::t('base', 'Allow');
} elseif ($state === self::STATE_DENY) {
return Yii::t('base', 'Deny');
} elseif ($state == '') {
return Yii::t('base', 'Default');
}
throw new Exception('Invalid permission state');
}
/**
* @param array Ids of additional fixed groups
*/
public function addFixedGroups($groupIds) {
if (is_array($groupIds) && !empty($groupIds)) {
$this->fixedGroups = array_merge($this->fixedGroups, $groupIds);
}
}
}