%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/components/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/components/User.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\user\components;
use humhub\modules\user\authclient\AuthClientHelpers;
use humhub\modules\user\authclient\Password;
use humhub\modules\user\authclient\interfaces\AutoSyncUsers;
use humhub\modules\user\events\UserEvent;
use humhub\modules\user\helpers\AuthHelper;
use humhub\modules\user\models\User as UserModel;
use Yii;
use yii\authclient\ClientInterface;
/**
* Description of User
* @property UserModel|null $identity
* @mixin Impersonator
* @author luke
*/
class User extends \yii\web\User
{
const EVENT_BEFORE_SWITCH_IDENTITY = 'beforeSwitchIdentity';
/**
* @var ClientInterface[] the users authclients
*/
private $_authClients = null;
/**
* @var PermissionManager
*/
protected $permissionManager = null;
/**
* @var string Route to force user to change password
* @since 1.8
*/
public $mustChangePasswordRoute = '/user/must-change-password';
/**
* @inheritdoc
*/
public function behaviors()
{
return [
Impersonator::class,
];
}
public function isAdmin()
{
if ($this->isGuest) {
return false;
}
return $this->getIdentity()->isSystemAdmin();
}
public function getLanguage()
{
if ($this->isGuest) {
return '';
}
return $this->getIdentity()->language;
}
public function getTimeZone()
{
if ($this->isGuest) {
return '';
}
return $this->getIdentity()->time_zone;
}
public function getGuid()
{
if ($this->isGuest) {
return '';
}
return $this->getIdentity()->guid;
}
/**
* Verifies global GroupPermissions of this User component.
*
* The following example checks if this User is granted the GroupPermission
*
* ```php
* if(Yii::$app->user->can(MyGroupPermission::class) {
* // ...
* }
* ```
*
* @param string|string[]|BasePermission $permission
* @return boolean
* @throws \yii\base\InvalidConfigException
* @throws \Throwable
* @since 1.2
* @see PermissionManager::can()
*/
public function can($permission, $params = [], $allowCaching = true)
{
return $this->getPermissionManager()->can($permission, $params, $allowCaching);
}
/**
* @return PermissionManager instance with the related identity instance as permission subject.
* @throws \Throwable
*/
public function getPermissionManager()
{
if ($this->permissionManager !== null) {
return $this->permissionManager;
}
$this->permissionManager = new PermissionManager(['subject' => $this->getIdentity()]);
return $this->permissionManager;
}
/**
* Determines if this user is able to change the password.
* @return boolean
*/
public function canChangePassword()
{
foreach ($this->getAuthClients() as $authClient) {
if ($authClient->className() == Password::class) {
return true;
}
}
return false;
}
/**
* Determines if this user is able to change the email address.
* @return boolean
* @throws \Throwable
*/
public function canChangeEmail()
{
if (in_array('email', AuthClientHelpers::getSyncAttributesByUser($this->getIdentity()))) {
return false;
}
return true;
}
/**
* Determines if this user is able to change his username.
* @return boolean
* @throws \Throwable
*/
public function canChangeUsername()
{
if (in_array('username', AuthClientHelpers::getSyncAttributesByUser($this->getIdentity()))) {
return false;
}
return true;
}
/**
* Determines if this user is able to delete his account.
* @return boolean
*/
public function canDeleteAccount()
{
foreach ($this->getAuthClients() as $authClient) {
if ($authClient instanceof AutoSyncUsers) {
return false;
}
}
return true;
}
public function getAuthClients()
{
if ($this->_authClients === null) {
$this->_authClients = AuthClientHelpers::getAuthClientsByUser($this->getIdentity());
}
return $this->_authClients;
}
public function setCurrentAuthClient(ClientInterface $authClient)
{
Yii::$app->session->set('currentAuthClientId', $authClient->getId());
}
public function getCurrentAuthClient()
{
foreach ($this->getAuthClients() as $authClient) {
if ($authClient->getId() == Yii::$app->session->get('currentAuthClientId')) {
return $authClient;
}
}
return null;
}
/**
* @inheritdoc
*/
public function afterLogin($identity, $cookieBased, $duration)
{
$identity->updateAttributes(['last_login' => date('Y-m-d G:i:s')]);
parent::afterLogin($identity, $cookieBased, $duration);
}
/**
* Checks if the system configuration allows access for guests
*
* @return boolean is guest access enabled and allowed
* @deprecated since 1.4
*/
public static function isGuestAccessEnabled()
{
return AuthHelper::isGuestAccessEnabled();
}
/**
* @inheritdoc
*/
public function switchIdentity($identity, $duration = 0)
{
$this->trigger(self::EVENT_BEFORE_SWITCH_IDENTITY, new UserEvent(['user' => $identity]));
if (empty($duration) && !Yii::$app->request->isConsoleRequest) {
// Try to use login duration from the current session, e.g. on impersonate action
$cookie = $this->getIdentityAndDurationFromCookie();
$duration = empty($cookie['duration']) ? 0 : $cookie['duration'];
}
parent::switchIdentity($identity, $duration);
}
/**
* @since 1.8
* @return bool Check if current page is already URL to forcing user to change password
*/
public function isMustChangePasswordUrl()
{
return Yii::$app->requestedRoute === trim($this->mustChangePasswordRoute, '/');
}
/**
* Determines if this user must change the password.
* @since 1.8
* @return boolean
*/
public function mustChangePassword()
{
return !$this->isGuest && $this->getIdentity() && $this->getIdentity()->mustChangePassword();
}
/**
* @inheritdoc
*/
public function loginRequired($checkAjax = true, $checkAcceptHeader = true)
{
// Fix 4700: Handle Microsoft Office Probe Requests
if (strpos(Yii::$app->request->getUserAgent(), 'Microsoft Office') !== false) {
Yii::$app->response->setStatusCode(200);
Yii::$app->response->data = Yii::$app->controller->htmlRedirect(Yii::$app->request->getAbsoluteUrl());
return Yii::$app->getResponse();
}
return parent::loginRequired($checkAjax, $checkAcceptHeader);
}
}