# LE ALС - access level control
В системе LE предусмотрены уровни доступа, эти уровни могут задаваться на уровне всего пространства (например админка или личный кабинет) и на уровне кокнкретных модулей, например простой менеджер не может добавлять администраторов сайта, а директор может.

## Хранение
Все аккаунты хранятся в таблице `sys_accounts`


Поле  | Тип | Описание
----- | ----- | ---------
id | int 12 |
login | varchar 200| Логин для авторизации
level | int 2 | уровень привелегий
password | varchar 32 | пароль в формате md5, позже вероятно можно перейти на sha-256
name | varchar 250 |Имя для отображения на сайте|
data | JSON |Любые произвольные, обычно анкетные данные, например адрес, этаж, код от домофона, ссылка на соц сеть... 

## Уровни доступа
В конкретном приложении можно придумать свои уровни, но на стандартном решени будут вот такие уровни

Уровень  | Роль | Описание
----- | ----- | ---------
0 | Гость | Обычный посетитель сайта, который не авторизовался
1 | Обычный пользователь | Это или покупатель или читатель, может например заходить в свой кабинет, менять свои данные, но в основном ограниченный, с нулевой кармой
2 | Привилигированный пользователь | Это человек имеющий например право писать комментарии и как-то модифицировать наполнение внешней части сайта
3 | Модератор | 
4 | Менеджер |
5 | Директор |
6 | Администратор |

## Включение контроля доступа
Контроль доступа можно включить как на уровне всего пространства (например админка), так и на уровне конкретного модуля, для этого в начале файла достаточно добавить

```php
$user_lev = LE::$ALC->set_lev(2);
```
Где 2 - это минимальный уровень доступа для данного функционала, даже если посетитель авторизовался, но у него уровень 1, то он не будет иметь доступа к данному функционалу и получит 403 ошибку

Помимо этого, указанная функция возвращает уровень доступа текущего пользователя, что позволяет кастомизировать меню, скрывать запрещенные пункты итд...

Если пользователь не авторизован, то он получит форму для ввода логина и пароля, дальнейшее выполнение скрипта остановится.