1111use Magento \Authorization \Model \Acl \Role \Group as RoleGroup ;
1212use Magento \Authorization \Model \UserContextInterface ;
1313use Magento \Framework \Controller \ResultFactory ;
14+ use Magento \Framework \Exception \LocalizedException ;
1415use Magento \Framework \Exception \State \UserLockedException ;
1516use Magento \Security \Model \SecurityCookie ;
1617
@@ -77,10 +78,8 @@ public function execute()
7778
7879 $ rid = $ this ->getRequest ()->getParam ('role_id ' , false );
7980 $ resource = $ this ->getRequest ()->getParam ('resource ' , false );
80- $ roleUsers = $ this ->getRequest ()->getParam ('in_role_user ' , null );
81- parse_str ($ roleUsers , $ roleUsers );
82- $ roleUsers = array_keys ($ roleUsers );
83-
81+ $ oldRoleUsers = $ this ->parseRequestVariable ('in_role_user_old ' );
82+ $ roleUsers = $ this ->parseRequestVariable ('in_role_user ' );
8483 $ isAll = $ this ->getRequest ()->getParam ('all ' );
8584 if ($ isAll ) {
8685 $ resource = [$ this ->_objectManager ->get (\Magento \Framework \Acl \RootResource::class)->getId ()];
@@ -106,28 +105,24 @@ public function execute()
106105 $ role ->save ();
107106
108107 $ this ->_rulesFactory ->create ()->setRoleId ($ role ->getId ())->setResources ($ resource )->saveRel ();
109-
110- $ this ->processPreviousUsers ($ role );
111-
112- foreach ($ roleUsers as $ nRuid ) {
113- $ this ->_addUserToRole ($ nRuid , $ role ->getId ());
114- }
115- $ this ->messageManager ->addSuccess (__ ('You saved the role. ' ));
108+ $ this ->processPreviousUsers ($ role , $ oldRoleUsers );
109+ $ this ->processCurrentUsers ($ role , $ roleUsers );
110+ $ this ->messageManager ->addSuccessMessage (__ ('You saved the role. ' ));
116111 } catch (UserLockedException $ e ) {
117112 $ this ->_auth ->logout ();
118113 $ this ->getSecurityCookie ()->setLogoutReasonCookie (
119114 \Magento \Security \Model \AdminSessionsManager::LOGOUT_REASON_USER_LOCKED
120115 );
121116 return $ resultRedirect ->setPath ('* ' );
122117 } catch (\Magento \Framework \Exception \AuthenticationException $ e ) {
123- $ this ->messageManager ->addError (
118+ $ this ->messageManager ->addErrorMessage (
124119 __ ('The password entered for the current user is invalid. Verify the password and try again. ' )
125120 );
126121 return $ this ->saveDataToSessionAndRedirect ($ role , $ this ->getRequest ()->getPostValue (), $ resultRedirect );
127122 } catch (\Magento \Framework \Exception \LocalizedException $ e ) {
128- $ this ->messageManager ->addError ($ e ->getMessage ());
123+ $ this ->messageManager ->addErrorMessage ($ e ->getMessage ());
129124 } catch (\Exception $ e ) {
130- $ this ->messageManager ->addError (__ ('An error occurred while saving this role. ' ));
125+ $ this ->messageManager ->addErrorMessage (__ ('An error occurred while saving this role. ' ));
131126 }
132127
133128 return $ resultRedirect ->setPath ('*/*/ ' );
@@ -151,32 +146,64 @@ protected function validateUser()
151146 return $ this ;
152147 }
153148
149+ /**
150+ * Parse request value from string
151+ *
152+ * @param string $paramName
153+ * @return array
154+ */
155+ private function parseRequestVariable ($ paramName ): array
156+ {
157+ $ value = $ this ->getRequest ()->getParam ($ paramName , null );
158+ parse_str ($ value , $ value );
159+ $ value = array_keys ($ value );
160+ return $ value ;
161+ }
162+
154163 /**
155164 * Process previous users
156165 *
157166 * @param \Magento\Authorization\Model\Role $role
167+ * @param array $oldRoleUsers
158168 * @return $this
159169 * @throws \Exception
160170 */
161- protected function processPreviousUsers (\Magento \Authorization \Model \Role $ role)
171+ protected function processPreviousUsers (\Magento \Authorization \Model \Role $ role, array $ oldRoleUsers ): self
162172 {
163- $ oldRoleUsers = $ this ->getRequest ()->getParam ('in_role_user_old ' );
164- parse_str ($ oldRoleUsers , $ oldRoleUsers );
165- $ oldRoleUsers = array_keys ($ oldRoleUsers );
166-
167173 foreach ($ oldRoleUsers as $ oUid ) {
168174 $ this ->_deleteUserFromRole ($ oUid , $ role ->getId ());
169175 }
170176
171177 return $ this ;
172178 }
173179
180+ /**
181+ * Processes users to be assigned to roles
182+ *
183+ * @param \Magento\Authorization\Model\Role $role
184+ * @param array $roleUsers
185+ * @return $this
186+ */
187+ private function processCurrentUsers (\Magento \Authorization \Model \Role $ role , array $ roleUsers ): self
188+ {
189+ foreach ($ roleUsers as $ nRuid ) {
190+ try {
191+ $ this ->_addUserToRole ($ nRuid , $ role ->getId ());
192+ } catch (LocalizedException $ e ) {
193+ $ this ->messageManager ->addErrorMessage ($ e ->getMessage ());
194+ }
195+ }
196+
197+ return $ this ;
198+ }
199+
174200 /**
175201 * Assign user to role
176202 *
177203 * @param int $userId
178204 * @param int $roleId
179205 * @return bool
206+ * @throws LocalizedException
180207 */
181208 protected function _addUserToRole ($ userId , $ roleId )
182209 {
0 commit comments