acls.class.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /*
  3. * This file is part of the Fred package.
  4. *
  5. * Copyright (c) MODX, LLC
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. require_once dirname(dirname(__FILE__)) . '/index.class.php';
  11. /**
  12. * @package fred
  13. * @subpackage controllers
  14. */
  15. class FredACLsManagerController extends FredBaseManagerController
  16. {
  17. public function process(array $scriptProperties = array())
  18. {
  19. $modx = $this->modx;
  20. $group = $modx->getObject('modAccessPolicyTemplateGroup', ['name' => 'Admin']);
  21. if (!$group) return;
  22. /** @var modAccessPolicyTemplate $template */
  23. $template = $modx->getObject('modAccessPolicyTemplate', ['name' => 'Fred', 'template_group' => $group->get('id')]);
  24. if (!$template) {
  25. $template = $modx->newObject('modAccessPolicyTemplate');
  26. }
  27. $template->set('name', 'Fred');
  28. $template->set('template_group', $group->get('id'));
  29. $template->set('description', 'A policy template to for Fred');
  30. $template->set('lexicon', 'fred:permissions');
  31. $template->save();
  32. $permissions = [
  33. 'fred',
  34. 'fred_elements',
  35. 'fred_element_save',
  36. 'fred_element_screenshot',
  37. 'fred_element_rte_config_save',
  38. 'fred_element_rte_config_delete',
  39. 'fred_element_rtes',
  40. 'fred_element_rebuild',
  41. 'fred_element_option_sets_save',
  42. 'fred_element_option_sets_delete',
  43. 'fred_element_option_sets',
  44. 'fred_element_move',
  45. 'fred_element_category_delete',
  46. 'fred_element_category_save',
  47. 'fred_element_delete',
  48. 'fred_element_categories',
  49. 'fred_themes_save',
  50. 'fred_themes_delete',
  51. 'fred_themes_build',
  52. 'fred_themes',
  53. 'fred_themed_templates_save',
  54. 'fred_themed_templates_delete',
  55. 'fred_themed_templates',
  56. 'fred_settings_tvs',
  57. 'fred_settings_tags',
  58. 'fred_settings_advanced',
  59. 'fred_media_sources',
  60. 'fred_settings',
  61. 'fred_blueprint_categories_save',
  62. 'fred_blueprint_categories_delete',
  63. 'fred_blueprint_categories_create_public',
  64. 'fred_blueprints_save',
  65. 'fred_blueprint_categories',
  66. 'fred_blueprints_delete',
  67. 'fred_blueprints_create_public',
  68. 'fred_blueprints',
  69. 'new_document_in_root',
  70. 'view_unpublished',
  71. 'resource_duplicate',
  72. 'unpublish_document',
  73. 'publish_document',
  74. 'save_document',
  75. 'undelete_document',
  76. 'new_document',
  77. 'delete_document',
  78. ];
  79. foreach ($permissions as $permission) {
  80. /** @var modAccessPermission $obj */
  81. $obj = $modx->getObject('modAccessPermission', ['template' => $template->get('id'), 'name' => $permission]);
  82. if (!$obj) {
  83. $obj = $modx->newObject('modAccessPermission');
  84. }
  85. $obj->set('template', $template->get('id'));
  86. $obj->set('name', $permission);
  87. $obj->set('description', "fred.permissions.{$permission}");
  88. $obj->save();
  89. }
  90. /** @var modAccessPolicy $adminPolicy */
  91. $adminPolicy = $modx->getObject('modAccessPolicy', ['name' => 'Fred Admin']);
  92. if (!$adminPolicy) {
  93. $adminPolicy = $modx->newObject('modAccessPolicy');
  94. $adminPolicy->set('name', 'Fred Admin');
  95. $adminPolicy->set('description', 'Administrator policy for Fred.');
  96. $adminPolicy->set('template', $template->get('id'));
  97. $adminPolicy->set('lexicon', $template->get('lexicon'));
  98. $data = [];
  99. foreach ($permissions as $permission) {
  100. $data[$permission] = true;
  101. }
  102. $adminPolicy->set('data', $data);
  103. $adminPolicy->save();
  104. }
  105. /** @var modUserGroup $adminUserGroup */
  106. $adminUserGroup = $modx->getObject('modUserGroup', ['id' => 1]);
  107. if ($adminUserGroup) {
  108. /** @var modContext[] $contexts */
  109. $contexts = $modx->getIterator('modContext');
  110. foreach ($contexts as $context) {
  111. $contextAccess = $modx->getObject('modAccessContext', [
  112. 'target' => $context->get('key'),
  113. 'policy' => $adminPolicy->get('id'),
  114. 'principal_class' => 'modUserGroup',
  115. ]);
  116. if (!$contextAccess) {
  117. $contextAccess = $modx->newObject('modAccessContext');
  118. }
  119. $contextAccess->set('target', $context->get('key'));
  120. $contextAccess->set('principal_class', 'modUserGroup');
  121. $contextAccess->set('principal', 1);
  122. $contextAccess->set('policy', $adminPolicy->get('id'));
  123. $contextAccess->set('authority', 0);
  124. $contextAccess->save();
  125. }
  126. }
  127. /** @var modAccessPolicy $editorPolicy */
  128. $editorPolicy = $modx->getObject('modAccessPolicy', ['name' => 'Fred Editor']);
  129. if (!$editorPolicy) {
  130. $editorPolicy = $modx->newObject('modAccessPolicy');
  131. $editorPolicy->set('name', 'Fred Editor');
  132. $editorPolicy->set('description', 'Editor policy for Fred.');
  133. $editorPolicy->set('template', $template->get('id'));
  134. $editorPolicy->set('lexicon', $template->get('lexicon'));
  135. $data = [
  136. 'delete_document' => true,
  137. 'fred' => true,
  138. 'fred_blueprint_categories' => true,
  139. 'fred_blueprint_categories_create_public' => true,
  140. 'fred_blueprint_categories_save' => true,
  141. 'fred_blueprints' => true,
  142. 'fred_blueprints_create_public' => true,
  143. 'fred_blueprints_save' => true,
  144. 'fred_element_categories' => true,
  145. 'fred_element_category_save' => true,
  146. 'fred_element_move' => true,
  147. 'fred_element_save' => true,
  148. 'fred_elements' => true,
  149. 'fred_settings' => true,
  150. 'fred_settings_advanced' => true,
  151. 'fred_settings_tags' => true,
  152. 'fred_settings_tvs' => true,
  153. 'fred_themed_templates' => true,
  154. 'new_document' => true,
  155. 'resource_duplicate' => true,
  156. 'save_document' => true,
  157. 'view_unpublished' => true,
  158. ];
  159. $editorPolicy->set('data', $data);
  160. $editorPolicy->save();
  161. }
  162. }
  163. public function getPageTitle()
  164. {
  165. return $this->modx->lexicon('fred.menu.fred');
  166. }
  167. public function checkPermissions()
  168. {
  169. return true;
  170. }
  171. }