Access.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief проверка прав доступа пользователей на "чтение"/"запись"
6  *
7  */
8 
9 
10 namespace Wrong\Rights;
11 
13 use Wrong\Start\Env;
15 
16 /**
17  * @brief Access класс, проверки прав доступов
18  *
19  */
20 
21 class Access
22 {
23 
24  /**
25  * конструктор:
26  *
27  * @param object $user пользователь для которого делается проверка
28  */
29  public function __construct($user)
30  {
31  $this->user = $user;
32  }
33 
34  /**
35  * Проверяет доступность модели для пользователя на доступ
36  * (юзер состоит в группах доступа модели и она включена, либо юзер состоит в группе - владельца модели) группа владелец модели должна быть также включена
37  * функция не сравнивает наличие прав по весу подчиненных групп, проверяются только группы доступа модели и его владелец
38  *
39  * @param object $row проверяемая модель
40  *
41  * @return bool истинное означает наличие доступа к модели
42  */
43 
44  public function read($row)
45  {
46  if (!$row) return false;
47  return (bool) ((array_intersect($this->user->groups, json_decode($row->groups, true)) && $row->act && Group::is_active($row->owner_group)) || ($this->user->id && in_array($row->owner_group, $this->user->groups)));
48  }
49 
50  /**
51  * Проверяет доступность модели для пользователя на её изменение
52  * (группа владелец входит в подчиненные группы)
53  *
54  * @param object $row проверяемая модель
55  * @param bool $extended опционально расширяет права для системной группы, которая не входит в подчиненные админу группы
56  *
57  * @return bool истинное означает наличие доступа на изменение модели
58  */
59  public function write($row, $extended = false)
60  {
61  if (!$row) return false;
62  if ($extended || Env::$e->DEVELOPER_MODE) { // расширенные права на изменение своих системных моделей при включенном режиме разработчика
63  return in_array($row->owner_group, $this->user->subordinate_groups) || in_array($row->owner_group, $this->user->groups);
64  }
65  return in_array($row->owner_group, $this->user->subordinate_groups);
66  }
67 
68  /**
69  * Проверяет принадлежность данной модели к системной группе
70  *
71  * @param object $row проверяемая модель
72  */
73  public function is_system($row)
74  {
75  return $row->owner_group == 1 && !Env::$e->DEVELOPER_MODE;
76  }
77 
78  /**
79  * Проверяет доступность модели страницы с указанным request или id
80  *
81  * @param mixed $value - request или id модели
82  */
83  public function page($value)
84  {
85  $arr = Controller::all($value, is_int($value) ? 'id' : 'request', 'pages');
86  $arr = array_filter($arr, function ($row) {
87  return $this->read($row);
88  });
89  return boolval($arr);
90  }
91 
92  /**
93  * Проверяет доступность модели модального окна с указанным request или id
94  *
95  * @param mixed $value - request или id модели
96  */
97  public function modal($value)
98  {
99  $arr = Controller::all($value, is_int($value) ? 'id' : 'request', 'modals');
100  $arr = array_filter($arr, function ($row) {
101  return $this->read($row);
102  });
103  return boolval($arr);
104  }
105 
106  /**
107  * Проверяет доступность модели действия с указанным request или id
108  *
109  * @param mixed $value - request или id модели
110  */
111  public function action($value)
112  {
113  $arr = Controller::all($value, is_int($value) ? 'id' : 'request', 'actions');
114  $arr = array_filter($arr, function ($row) {
115  return $this->read($row);
116  });
117  return boolval($arr);
118  }
119 
120  /**
121  * Проверяет доступность модели выборки с указанным request или id
122  *
123  * @param mixed $value - request или id модели
124  */
125  public function select($value)
126  {
127  $arr = Controller::all($value, is_int($value) ? 'id' : 'request', 'selects');
128  $arr = array_filter($arr, function ($row) {
129  return $this->read($row);
130  });
131  return boolval($arr);
132  }
133 
134  /**
135  * Проверяет доступность модели шаблона с указанным id
136  *
137  * @param mixed $value - id модели
138  */
139  public function template($value)
140  {
141  $arr = Controller::all($value, 'id', 'templates');
142  $arr = array_filter($arr, function ($row) {
143  return $this->read($row);
144  });
145  return boolval($arr);
146  }
147 }
Controller контроллер для запросов к БД
Definition: Controller.php:17
static all($value='', $column='id', $table='')
Definition: Controller.php:55
Access класс, проверки прав доступов
Definition: Access.php:22
write($row, $extended=false)
Definition: Access.php:59
__construct($user)
Definition: Access.php:29
Group класс, содержащий статические методы, используемые для управления группами пользователей.
Definition: Group.php:25
static is_active($id)
Definition: Group.php:222
Env класс управляющий, добавляющий или записывающий переменные среды
Definition: Env.php:17
static $e
Definition: Env.php:22
$user
Definition: from-user.php:38
$arr
Definition: actions.php:25