· 6 years ago · Jan 31, 2020, 09:28 PM
1<?php
2
3namespace Drupal\sitefarm_simple_configuration\Form;
4
5use Drupal\Core\Form\FormStateInterface;
6use Drupal\user\Form\UserPermissionsForm;
7
8/**
9 * Class PermissionsForm.
10 *
11 * @package Drupal\sitefarm_simple_configuration\Form
12 */
13class PermissionsForm extends UserPermissionsForm {
14
15 /**
16 * {@inheritdoc}
17 */
18 public function getFormId() {
19 return 'sitefarm_permissions';
20 }
21
22 /**
23 * {@inheritdoc}
24 */
25 public function buildForm(array $form, FormStateInterface $form_state) {
26 $form = parent::buildForm($form, $form_state);
27
28 $form = $this->buildFormAlter($form);
29
30 return $form;
31 }
32
33 /**
34 * Alter the buildForm() method.
35 *
36 * @param array $form
37 *
38 * @return array
39 */
40 public function buildFormAlter(array $form) {
41 // Get all Form API properties from the permissions array.
42 $properties = array_filter($form['permissions'], function ($key) {
43 return strpos($key, '#') === 0;
44 }, ARRAY_FILTER_USE_KEY);
45
46 // Only allow permissions from these modules.
47 $allowed_providers = [
48 'content_moderation',
49 'node',
50 'node_view_permissions',
51 'taxonomy',
52 ];
53
54 // Always hide these permissions.
55 $restricted_permissions = [
56 // Content Moderation.
57 'view any unpublished content',
58 'view latest version',
59 // Node.
60 'access content overview',
61 'access content',
62 'administer nodes',
63 'administer content types',
64 'bypass node access',
65 'delete all revisions',
66 'revert all revisions',
67 'view all revisions',
68 'view own unpublished content',
69 // Node View Permissions.
70 // Taxonomy.
71 'access taxonomy overview',
72 'administer taxonomy',
73 ];
74
75 $allowed_permissions = [];
76
77 // This variable will determine if a permission is from an allowed module.
78 $valid_module = FALSE;
79
80 foreach ($form['permissions'] as $permission_name => $values) {
81 // Are we in a valid loop of permissions.
82 if (!$valid_module) {
83 if (in_array($permission_name, $allowed_providers)) {
84 $valid_module = TRUE;
85 }
86 }
87 // Check that we haven't moved on to a new invalid module.
88 elseif (!isset($values['description']) && !in_array($permission_name, $allowed_providers)) {
89 $valid_module = FALSE;
90 }
91
92 // Move to the next item if we still don't have a valid module.
93 if (!$valid_module) {
94 continue;
95 }
96
97 // Restrict to non sf_ prefixed, and non restricted permissions.
98 // if (strpos($permission_name, 'sf_') === FALSE && !in_array($permission_name, $restricted_permissions)) {
99 // $allowed_permissions[$permission_name] = $values;
100 // }
101
102
103 //if (in_array('node_view_permissions', $allowed_providers) === TRUE && !in_array($permission_name, $restricted_permissions)) {
104 // $allowed_permissions[$permission_name] = $values;
105 // }
106
107 if (in_array('node_view_permissions', $allowed_providers) === FALSE && strpos($permission_name, 'sf_') === TRUE && !in_array($permission_name, $restricted_permissions)) {
108 $allowed_permissions[$permission_name] = $values;
109 }
110
111
112
113 }
114
115 $form['permissions'] = array_merge($properties, $allowed_permissions);
116
117 return $form;
118 }
119
120}