PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/core/Modules/Permissions.php

https://gitlab.com/ElvisAns/tiki
PHP | 180 lines | 151 code | 16 blank | 13 comment | 8 complexity | 0ae70aff5ae731ec5fd5b4e9396f08e3 MD5 | raw file
  1. <?php
  2. // (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
  3. //
  4. // All Rights Reserved. See copyright.txt for details and a complete list of authors.
  5. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
  6. // $Id$
  7. namespace Tiki\Modules;
  8. use TikiLib;
  9. /**
  10. * Class responsible for all modules permission logic
  11. */
  12. class Permissions
  13. {
  14. /**
  15. * Return page permissions
  16. *
  17. * @return array
  18. */
  19. public function getPagePermissions()
  20. {
  21. $url = $_SERVER['SCRIPT_NAME'];
  22. if (null == $objectType = $this->findObjectType($url)) {
  23. return null;
  24. }
  25. switch ($objectType) {
  26. case 'wiki page':
  27. $objectId = ! empty($_REQUEST['page']) ? $_REQUEST['page'] : null;
  28. break;
  29. case 'file gallery':
  30. $filegallib = TikiLib::lib('filegal');
  31. $objectId = ! empty($_REQUEST['galleryId']) ? $_REQUEST['galleryId'] : null;
  32. break;
  33. case 'tracker':
  34. $objectId = ! empty($_REQUEST['trackerId']) ? $_REQUEST['trackerId'] : null;
  35. $itemId = ! empty($_REQUEST['itemId']) ? $_REQUEST['itemId'] : null;
  36. if ($itemId) {
  37. $objectId = $itemId;
  38. $objectType = 'trackeritem';
  39. }
  40. break;
  41. case 'forum':
  42. $objectId = ! empty($_REQUEST['forumId']) ? $_REQUEST['forumId'] : null;
  43. break;
  44. case 'group':
  45. $objectId = ! empty($_REQUEST['group']) ? $_REQUEST['group'] : null;
  46. break;
  47. case 'articles':
  48. $objectId = ! empty($_REQUEST['articleId']) ? $_REQUEST['articleId'] : null;
  49. break;
  50. case 'blog':
  51. $objectId = ! empty($_REQUEST['blogId']) ? $_REQUEST['blogId'] : null;
  52. break;
  53. case 'calendar':
  54. $objectId = ! empty($_REQUEST['calendarId']) ? $_REQUEST['calendarId'] : null;
  55. break;
  56. case 'sheet':
  57. $objectId = ! empty($_REQUEST['sheetId']) ? $_REQUEST['sheetId'] : null;
  58. break;
  59. }
  60. $all = TikiLib::lib('user')->get_permissions(0, -1, 'permName_asc', '', $this->findPermType($objectType), '', true);
  61. $accessor = \Perms::get(['type' => $objectType, 'object' => $objectId]);
  62. $loaded = $accessor->getResolver()->dump();
  63. $results = [];
  64. foreach ($all['data'] as $permDef) {
  65. foreach ($loaded['perms'] as $perm => $groups) {
  66. if ($perm != str_replace('tiki_p_', '', $permDef['name'])) {
  67. continue;
  68. }
  69. $results[$permDef['type']][$perm] = $groups;
  70. }
  71. }
  72. $loaded['perms'] = $results;
  73. return $loaded;
  74. }
  75. protected function findObjectType($url)
  76. {
  77. $objectPaths = [
  78. 'wiki page' => [
  79. 'tiki-index.php',
  80. 'tiki-listpages.php',
  81. 'tiki-editpage.php',
  82. 'tiki-copypage.php',
  83. 'tiki-pagehistory.php'
  84. ],
  85. 'file gallery' => [
  86. 'tiki-list_file_gallery.php'
  87. ],
  88. 'tracker' => [
  89. 'tiki-list_trackers.php',
  90. 'tiki-view_tracker.php',
  91. 'tiki-view_tracker_item.php',
  92. 'tiki-admin_tracker_fields.php'
  93. ],
  94. 'forum' => [
  95. 'tiki-forums.php',
  96. 'tiki-view_forum.php',
  97. 'tiki-admin_forums.php',
  98. 'tiki-forum_import.php'],
  99. 'group' => [
  100. 'tiki-admingroups.php'
  101. ],
  102. 'articles' => [
  103. 'tiki-list_articles.php',
  104. 'tiki-view_articles.php',
  105. 'tiki-edit_article.php',
  106. 'tiki-read_article.php'
  107. ],
  108. 'blog' => [
  109. 'tiki-list_blogs.php',
  110. 'tiki-edit_blog.php',
  111. 'tiki-blog_post.php',
  112. 'tiki-list_posts.php',
  113. 'tiki-view_blog.php',
  114. 'tiki-view_blog_post.php'
  115. ],
  116. 'calendar' => [
  117. 'tiki-calendar.php',
  118. 'tiki-calendar_edit_item.php',
  119. 'tiki-admin_calendars.php',
  120. 'tiki-calendar_import.php'
  121. ],
  122. 'sheet' => [
  123. 'tiki-sheets.php',
  124. 'tiki-view_sheets.php',
  125. 'tiki-graph_sheet.php',
  126. 'tiki-history_sheets.php',
  127. 'tiki-export_sheet.php',
  128. 'tiki-import_sheet.php',
  129. ],
  130. ];
  131. foreach ($objectPaths as $object => $paths) {
  132. foreach ($paths as $path) {
  133. if (strpos($url, $path) !== false) {
  134. return $object;
  135. }
  136. }
  137. }
  138. return null;
  139. }
  140. protected function findPermType($objectType)
  141. {
  142. switch ($objectType) {
  143. case 'wiki page':
  144. return 'wiki';
  145. case 'file gallery':
  146. return 'file galleries';
  147. case 'tracker':
  148. case 'trackeritem':
  149. return 'trackers';
  150. case 'forum':
  151. return 'forums';
  152. case 'group':
  153. return 'group';
  154. case 'articles':
  155. return 'articles';
  156. case 'blog':
  157. return 'blogs';
  158. case 'calendar':
  159. return 'calendar';
  160. case 'sheet':
  161. return 'sheet';
  162. }
  163. }
  164. }