Skip to content

Commit 7d35459

Browse files
authored
Merge pull request #5824 from magento-tsg/2.3.6-develop-pr139
[TSG] Fixes for 2.3 (pr139) (2.3.6-develop)
2 parents 0181689 + ea72543 commit 7d35459

File tree

10 files changed

+199
-60
lines changed

10 files changed

+199
-60
lines changed

app/code/Magento/Authorization/Model/ResourceModel/Role.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ protected function _afterDelete(\Magento\Framework\Model\AbstractModel $role)
119119

120120
$connection->delete($this->_ruleTable, ['role_id = ?' => (int)$role->getId()]);
121121

122+
$this->_cache->clean(\Zend_Cache::CLEANING_MODE_MATCHING_TAG, [\Magento\Backend\Block\Menu::CACHE_TAGS]);
123+
122124
return $this;
123125
}
124126

app/code/Magento/Authorization/Model/Role.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ class Role extends \Magento\Framework\Model\AbstractModel
3333
*/
3434
protected $_eventPrefix = 'authorization_roles';
3535

36+
/**
37+
* @var string
38+
*/
39+
protected $_cacheTag = 'user_assigned_role';
40+
3641
/**
3742
* @param \Magento\Framework\Model\Context $context
3843
* @param \Magento\Framework\Registry $registry

app/code/Magento/Backend/Model/Auth/Session.php

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
*/
66
namespace Magento\Backend\Model\Auth;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
910
use Magento\Framework\Stdlib\CookieManagerInterface;
11+
use Magento\Framework\Message\ManagerInterface;
1012

1113
/**
1214
* Backend Auth session model
@@ -56,6 +58,11 @@ class Session extends \Magento\Framework\Session\SessionManager implements \Mage
5658
*/
5759
protected $_config;
5860

61+
/**
62+
* @var ManagerInterface
63+
*/
64+
private $messageManager;
65+
5966
/**
6067
* @param \Magento\Framework\App\Request\Http $request
6168
* @param \Magento\Framework\Session\SidResolverInterface $sidResolver
@@ -69,6 +76,7 @@ class Session extends \Magento\Framework\Session\SessionManager implements \Mage
6976
* @param \Magento\Framework\Acl\Builder $aclBuilder
7077
* @param \Magento\Backend\Model\UrlInterface $backendUrl
7178
* @param \Magento\Backend\App\ConfigInterface $config
79+
* @param ManagerInterface $messageManager
7280
* @throws \Magento\Framework\Exception\SessionException
7381
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
7482
*/
@@ -84,11 +92,13 @@ public function __construct(
8492
\Magento\Framework\App\State $appState,
8593
\Magento\Framework\Acl\Builder $aclBuilder,
8694
\Magento\Backend\Model\UrlInterface $backendUrl,
87-
\Magento\Backend\App\ConfigInterface $config
95+
\Magento\Backend\App\ConfigInterface $config,
96+
ManagerInterface $messageManager = null
8897
) {
8998
$this->_config = $config;
9099
$this->_aclBuilder = $aclBuilder;
91100
$this->_backendUrl = $backendUrl;
101+
$this->messageManager = $messageManager ?? ObjectManager::getInstance()->get(ManagerInterface::class);
92102
parent::__construct(
93103
$request,
94104
$sidResolver,
@@ -171,6 +181,25 @@ public function isLoggedIn()
171181
*/
172182
public function prolong()
173183
{
184+
$sessionUser = $this->getUser();
185+
$errorMessage = '';
186+
if ($sessionUser !== null) {
187+
if ((int)$sessionUser->getIsActive() !== 1) {
188+
$errorMessage = 'The account sign-in was incorrect or your account is disabled temporarily. '
189+
. 'Please wait and try again later.';
190+
}
191+
if (!$sessionUser->hasAssigned2Role($sessionUser->getId())) {
192+
$errorMessage = 'More permissions are needed to access this.';
193+
}
194+
195+
if (!empty($errorMessage)) {
196+
$this->destroy();
197+
$this->messageManager->addErrorMessage(__($errorMessage));
198+
199+
return;
200+
}
201+
}
202+
174203
$lifetime = $this->_config->getValue(self::XML_PATH_SESSION_LIFETIME);
175204
$cookieValue = $this->cookieManager->getCookie($this->getName());
176205

app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,12 @@ public function execute()
102102
'admin_permissions_role_prepare_save',
103103
['object' => $role, 'request' => $this->getRequest()]
104104
);
105-
$role->save();
106-
107-
$this->_rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
108105
$this->processPreviousUsers($role, $oldRoleUsers);
109106
$this->processCurrentUsers($role, $roleUsers);
107+
108+
$role->save();
109+
$this->_rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
110+
110111
$this->messageManager->addSuccessMessage(__('You saved the role.'));
111112
} catch (UserLockedException $e) {
112113
$this->_auth->logout();
@@ -155,6 +156,7 @@ protected function validateUser()
155156
private function parseRequestVariable($paramName): array
156157
{
157158
$value = $this->getRequest()->getParam($paramName, null);
159+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
158160
parse_str($value, $value);
159161
$value = array_keys($value);
160162
return $value;

app/code/Magento/User/Model/ResourceModel/User.php

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Magento\Framework\Acl\Data\CacheInterface;
1515
use Magento\Framework\App\ObjectManager;
1616
use Magento\Framework\Exception\LocalizedException;
17+
use Magento\Framework\Model\AbstractModel;
1718
use Magento\User\Model\Backend\Config\ObserverConfig;
1819
use Magento\User\Model\User as ModelUser;
1920

@@ -146,7 +147,7 @@ public function hasAssigned2Role($user)
146147
{
147148
if (is_numeric($user)) {
148149
$userId = $user;
149-
} elseif ($user instanceof \Magento\Framework\Model\AbstractModel) {
150+
} elseif ($user instanceof AbstractModel) {
150151
$userId = $user->getUserId();
151152
} else {
152153
return null;
@@ -171,13 +172,25 @@ public function hasAssigned2Role($user)
171172
}
172173
}
173174

175+
/**
176+
* @inheritDoc
177+
*/
178+
protected function _beforeSave(AbstractModel $user)
179+
{
180+
if ($user->hasRoleId()) {
181+
$user->setReloadAclFlag(1);
182+
}
183+
184+
return parent::_beforeSave($user);
185+
}
186+
174187
/**
175188
* Unserialize user extra data after user save
176189
*
177-
* @param \Magento\Framework\Model\AbstractModel $user
190+
* @param AbstractModel $user
178191
* @return $this
179192
*/
180-
protected function _afterSave(\Magento\Framework\Model\AbstractModel $user)
193+
protected function _afterSave(AbstractModel $user)
181194
{
182195
$user->setExtra($this->getSerializer()->unserialize($user->getExtra()));
183196
if ($user->hasRoleId()) {
@@ -234,10 +247,10 @@ protected function _createUserRole($parentId, ModelUser $user)
234247
/**
235248
* Unserialize user extra data after user load
236249
*
237-
* @param \Magento\Framework\Model\AbstractModel $user
250+
* @param AbstractModel $user
238251
* @return $this
239252
*/
240-
protected function _afterLoad(\Magento\Framework\Model\AbstractModel $user)
253+
protected function _afterLoad(AbstractModel $user)
241254
{
242255
if (is_string($user->getExtra())) {
243256
$user->setExtra($this->getSerializer()->unserialize($user->getExtra()));
@@ -248,11 +261,11 @@ protected function _afterLoad(\Magento\Framework\Model\AbstractModel $user)
248261
/**
249262
* Delete user role record with user
250263
*
251-
* @param \Magento\Framework\Model\AbstractModel $user
264+
* @param AbstractModel $user
252265
* @return bool
253266
* @throws LocalizedException
254267
*/
255-
public function delete(\Magento\Framework\Model\AbstractModel $user)
268+
public function delete(AbstractModel $user)
256269
{
257270
$uid = $user->getId();
258271
if (!$uid) {
@@ -284,10 +297,10 @@ public function delete(\Magento\Framework\Model\AbstractModel $user)
284297
/**
285298
* Get user roles
286299
*
287-
* @param \Magento\Framework\Model\AbstractModel $user
300+
* @param AbstractModel $user
288301
* @return array
289302
*/
290-
public function getRoles(\Magento\Framework\Model\AbstractModel $user)
303+
public function getRoles(AbstractModel $user)
291304
{
292305
if (!$user->getId()) {
293306
return [];
@@ -325,10 +338,10 @@ public function getRoles(\Magento\Framework\Model\AbstractModel $user)
325338
/**
326339
* Delete user role
327340
*
328-
* @param \Magento\Framework\Model\AbstractModel $user
341+
* @param AbstractModel $user
329342
* @return $this
330343
*/
331-
public function deleteFromRole(\Magento\Framework\Model\AbstractModel $user)
344+
public function deleteFromRole(AbstractModel $user)
332345
{
333346
if ($user->getUserId() <= 0) {
334347
return $this;
@@ -352,10 +365,10 @@ public function deleteFromRole(\Magento\Framework\Model\AbstractModel $user)
352365
/**
353366
* Check if role user exists
354367
*
355-
* @param \Magento\Framework\Model\AbstractModel $user
368+
* @param AbstractModel $user
356369
* @return array
357370
*/
358-
public function roleUserExists(\Magento\Framework\Model\AbstractModel $user)
371+
public function roleUserExists(AbstractModel $user)
359372
{
360373
if ($user->getUserId() > 0) {
361374
$roleTable = $this->getTable('authorization_role');
@@ -382,10 +395,10 @@ public function roleUserExists(\Magento\Framework\Model\AbstractModel $user)
382395
/**
383396
* Check if user exists
384397
*
385-
* @param \Magento\Framework\Model\AbstractModel $user
398+
* @param AbstractModel $user
386399
* @return array
387400
*/
388-
public function userExists(\Magento\Framework\Model\AbstractModel $user)
401+
public function userExists(AbstractModel $user)
389402
{
390403
$connection = $this->getConnection();
391404
$select = $connection->select();
@@ -410,18 +423,18 @@ public function userExists(\Magento\Framework\Model\AbstractModel $user)
410423
/**
411424
* Whether a user's identity is confirmed
412425
*
413-
* @param \Magento\Framework\Model\AbstractModel $user
426+
* @param AbstractModel $user
414427
* @return bool
415428
*/
416-
public function isUserUnique(\Magento\Framework\Model\AbstractModel $user)
429+
public function isUserUnique(AbstractModel $user)
417430
{
418431
return !$this->userExists($user);
419432
}
420433

421434
/**
422435
* Save user extra data
423436
*
424-
* @param \Magento\Framework\Model\AbstractModel $object
437+
* @param AbstractModel $object
425438
* @param string $data
426439
* @return $this
427440
*/

app/code/Magento/User/Model/User.php

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,37 @@
3838
class User extends AbstractModel implements StorageInterface, UserInterface
3939
{
4040
/**
41-
* @deprecated
41+
* @deprecated New functionality has been added. It isn't used anymore
4242
* @see \Magento\User\Model\Spi\NotificatorInterface
4343
*/
4444
const XML_PATH_FORGOT_EMAIL_TEMPLATE = 'admin/emails/forgot_email_template';
4545

4646
/**
47-
* @deprecated
47+
* @deprecated New functionality has been added. It isn't used anymore
4848
* @see \Magento\User\Model\Spi\NotificatorInterface
4949
*/
5050
const XML_PATH_FORGOT_EMAIL_IDENTITY = 'admin/emails/forgot_email_identity';
5151

5252
/**
53-
* @deprecated
53+
* @deprecated New functionality has been added. It isn't used anymore
5454
* @see \Magento\User\Model\Spi\NotificatorInterface
5555
*/
5656
const XML_PATH_USER_NOTIFICATION_TEMPLATE = 'admin/emails/user_notification_template';
5757

5858
/**
5959
* Configuration paths for admin user reset password email template
6060
*
61-
* @deprecated
61+
* @deprecated New functionality has been added. It isn't used anymore
6262
*/
6363
const XML_PATH_RESET_PASSWORD_TEMPLATE = 'admin/emails/reset_password_template';
6464

6565
const MESSAGE_ID_PASSWORD_EXPIRED = 'magento_user_password_expired';
6666

67+
/**
68+
* Tag to use for user assigned role caching.
69+
*/
70+
private const CACHE_TAG = 'user_assigned_role';
71+
6772
/**
6873
* Model event prefix
6974
*
@@ -148,6 +153,14 @@ class User extends AbstractModel implements StorageInterface, UserInterface
148153
*/
149154
private $deploymentConfig;
150155

156+
/**
157+
* @var array
158+
*/
159+
protected $_cacheTag = [
160+
\Magento\Backend\Block\Menu::CACHE_TAGS,
161+
self::CACHE_TAG,
162+
];
163+
151164
/**
152165
* @param \Magento\Framework\Model\Context $context
153166
* @param \Magento\Framework\Registry $registry
@@ -683,7 +696,27 @@ public function loadByUsername($username)
683696
*/
684697
public function hasAssigned2Role($user)
685698
{
686-
return $this->getResource()->hasAssigned2Role($user);
699+
if ($user instanceof AbstractModel) {
700+
$userId = $user->getUserId();
701+
} elseif (is_numeric($user) && (int)$user !== 0) {
702+
$userId = $user;
703+
} else {
704+
return null;
705+
}
706+
$data = $this->_cacheManager->load('assigned_role_' . $userId);
707+
if (false === $data) {
708+
$data = $this->getResource()->hasAssigned2Role($user);
709+
710+
$this->_cacheManager->save(
711+
$this->serializer->serialize($data),
712+
'assigned_role_' . $userId,
713+
[self::CACHE_TAG]
714+
);
715+
} else {
716+
$data = $this->serializer->unserialize($data);
717+
}
718+
719+
return $data;
687720
}
688721

689722
/**

dev/tests/integration/testsuite/Magento/Framework/Error/ProcessorTest.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ protected function setUp()
3131
protected function tearDown()
3232
{
3333
$reportDir = $this->processor->_reportDir;
34-
$this->removeDirRecursively($reportDir);
34+
35+
if (is_dir($reportDir)) {
36+
$this->removeDirRecursively($reportDir);
37+
}
3538
}
3639

3740
/**
@@ -137,4 +140,16 @@ private function removeDirRecursively(string $dir, int $i = 0): bool
137140
}
138141
return rmdir($dir);
139142
}
143+
144+
/**
145+
* @return void
146+
*/
147+
public function testGetViewFileUrl(): void
148+
{
149+
$this->processor->_indexDir = __DIR__ . '/version1/magento2';
150+
$this->processor->_errorDir = __DIR__ . '/version2/magento2';
151+
152+
$this->assertNotContains('version2/magento2', $this->processor->getViewFileUrl());
153+
$this->assertContains('pub/errors/', $this->processor->getViewFileUrl());
154+
}
140155
}

0 commit comments

Comments
 (0)