chg: [users:add] Update the permission limitation for org permission on /users/add
							parent
							
								
									888661a172
								
							
						
					
					
						commit
						aae584f0b7
					
				|  | @ -245,7 +245,8 @@ class ACLComponent extends Component | ||||||
|             'register' => ['*'], |             'register' => ['*'], | ||||||
|             'settings' => ['*'], |             'settings' => ['*'], | ||||||
|             'toggle' => ['OR' => ['perm_org_admin', 'perm_community_admin']], |             'toggle' => ['OR' => ['perm_org_admin', 'perm_community_admin']], | ||||||
|             'view' => ['*'] |             'view' => ['*'], | ||||||
|  |             'getLimitationForOrganisation' => ['OR' => ['perm_org_admin', 'perm_community_admin']], | ||||||
|         ], |         ], | ||||||
|         'UserSettings' => [ |         'UserSettings' => [ | ||||||
|             'index' => ['*'], |             'index' => ['*'], | ||||||
|  |  | ||||||
|  | @ -393,7 +393,7 @@ class CRUDComponent extends Component | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private function getMetaTemplates(array $metaTemplateConditions = []) |     public function getMetaTemplates(array $metaTemplateConditions = []) | ||||||
|     { |     { | ||||||
|         $metaTemplates = []; |         $metaTemplates = []; | ||||||
|         if (!$this->metaFieldsSupported()) { |         if (!$this->metaFieldsSupported()) { | ||||||
|  |  | ||||||
|  | @ -541,4 +541,22 @@ class UsersController extends AppController | ||||||
|         } |         } | ||||||
|         $this->viewBuilder()->setLayout('login'); |         $this->viewBuilder()->setLayout('login'); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public function getLimitationForOrganisation($org_id) { | ||||||
|  |         $currentUser = $this->ACL->getUser(); | ||||||
|  |         if (!$currentUser['role']['perm_community_admin']) { | ||||||
|  |             $validOrgs = $this->Users->getValidOrgsForUser($currentUser); | ||||||
|  |             if ($currentUser['role']['perm_group_admin']) { | ||||||
|  |                 if (!in_array($org_id, $validOrgs)) { | ||||||
|  |                     throw new MethodNotAllowedException(__('You do not have permission to assign that organisation.')); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         $fakeUser = $this->Users->newEmptyEntity(); | ||||||
|  |         $fakeUser->organisation_id = $org_id; // set fakeUser's to the selected org-id
 | ||||||
|  |         $metaTemplates = $this->CRUD->getMetaTemplates(); | ||||||
|  |         $fakeUser = $this->CRUD->attachMetaTemplatesIfNeeded($fakeUser, $metaTemplates->toArray()); | ||||||
|  |         $fakeUser = $this->fetchTable('PermissionLimitations')->attachLimitations($fakeUser); | ||||||
|  |         return $this->RestResponse->viewData($fakeUser, 'json'); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -102,6 +102,12 @@ echo $this->element('genericElements/Form/genericForm', [ | ||||||
| <script> | <script> | ||||||
|     $(document).ready(function() { |     $(document).ready(function() { | ||||||
|         const entity = <?= json_encode($entity) ?>;
 |         const entity = <?= json_encode($entity) ?>;
 | ||||||
|  |         createUIForPermission(entity) | ||||||
|  | 
 | ||||||
|  |         $('#organisation_id-field').change(updateOrgPermissionCount) | ||||||
|  |         updateOrgPermissionCount() | ||||||
|  | 
 | ||||||
|  |         function createUIForPermission(entity) { | ||||||
|             if (entity.MetaTemplates) { |             if (entity.MetaTemplates) { | ||||||
|                 for (const [metaTemplateId, metaTemplate] of Object.entries(entity.MetaTemplates)) { |                 for (const [metaTemplateId, metaTemplate] of Object.entries(entity.MetaTemplates)) { | ||||||
|                     for (const [metaTemplateFieldId, metaTemplateField] of Object.entries(metaTemplate.meta_template_fields)) { |                     for (const [metaTemplateFieldId, metaTemplateField] of Object.entries(metaTemplate.meta_template_fields)) { | ||||||
|  | @ -118,6 +124,7 @@ echo $this->element('genericElements/Form/genericForm', [ | ||||||
|                         } |                         } | ||||||
|                         if (metafieldInput !== null) { |                         if (metafieldInput !== null) { | ||||||
|                             const permissionWarnings = buildPermissionElement(metaTemplateField) |                             const permissionWarnings = buildPermissionElement(metaTemplateField) | ||||||
|  |                             $(metafieldInput.parentElement).find('.permission-container').remove() | ||||||
|                             $(metafieldInput.parentElement).append(permissionWarnings) |                             $(metafieldInput.parentElement).append(permissionWarnings) | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  | @ -126,7 +133,8 @@ echo $this->element('genericElements/Form/genericForm', [ | ||||||
| 
 | 
 | ||||||
|             function buildPermissionElement(metaTemplateField) { |             function buildPermissionElement(metaTemplateField) { | ||||||
|                 const warningTypes = ['danger', 'warning', 'info', ] |                 const warningTypes = ['danger', 'warning', 'info', ] | ||||||
|             const $span = $('<span>').addClass('ms-2') |                 const $span = $('<span>') | ||||||
|  |                     .addClass(['permission-container', 'ms-2']) | ||||||
|                 warningTypes.forEach(warningType => { |                 warningTypes.forEach(warningType => { | ||||||
|                     if (metaTemplateField[warningType]) { |                     if (metaTemplateField[warningType]) { | ||||||
|                         $theWarning = $('<span>') |                         $theWarning = $('<span>') | ||||||
|  | @ -140,5 +148,17 @@ echo $this->element('genericElements/Form/genericForm', [ | ||||||
|                 }); |                 }); | ||||||
|                 return $span |                 return $span | ||||||
|             } |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         async function updateOrgPermissionCount() { | ||||||
|  |             var org_id = $('#organisation_id-field').val() | ||||||
|  |             var url = `/users/getLimitationForOrganisation/${org_id}?includeMetatemplate=1` | ||||||
|  |             const response = await fetch(url, new Headers({Accept: 'application/json'})); | ||||||
|  |             if (!response.ok) { | ||||||
|  |                 throw new Error(`Network response was not ok. \`${response.statusText}\``) | ||||||
|  |             } | ||||||
|  |             const entity = await response.json(); | ||||||
|  |             createUIForPermission(entity) | ||||||
|  |         } | ||||||
|     }) |     }) | ||||||
| </script> | </script> | ||||||
		Loading…
	
		Reference in New Issue
	
	 Sami Mokaddem
						Sami Mokaddem