# Доступ по ролям

Единый механизм платформы для разграничения по ролям: задаётся общее значение для всех ролей плюс исключения для конкретных ролей. Один и тот же формат значения у четырёх ключей — каждый на своём владельце:

| Ключ | Владелец | Смысл |
|------|----------|-------|
| `userVisible` | элемент формы | пользовательская видимость элемента |
| `view` | реквизит формы | право просмотра |
| `edit` | реквизит формы | право редактирования |
| `use` | команда формы | доступность команды |

Ключ необязателен: его отсутствие = полный доступ для всех ролей.

## Значение

Две формы (одинаковы для всех четырёх ключей):

**Скаляр** `true` / `false` — общее значение для всех ролей, без исключений:

```json
{ "input": "Поле", "userVisible": false }
```

**Объект** `{ "common": <bool>, "roles": { "ИмяРоли": <bool>, … } }` — общее значение `common` плюс явные исключения по ролям:

```json
{ "name": "Реквизит",
  "edit": { "common": false, "roles": { "ПолныеПрава": true } } }
```

Роль, **не указанная** в `roles`, наследует `common`. Указанная — задаёт явный `true`/`false` (может и совпадать с `common`).

## Имя роли

Ключи в `roles` — имена ролей конфигурации (`ПолныеПрава`, `Бухгалтер`, …).

## Примеры

Элемент скрыт у всех пользователей:

```json
{ "input": "Комментарий", "userVisible": false }
```

Реквизит не виден никому и редактируется только одной ролью:

```json
{ "name": "СуммаБонуса",
  "view": false,
  "edit": { "common": false, "roles": { "ПолныеПрава": true } } }
```

Поле доступно для просмотра всем, но редактируемо только администратору:

```json
{ "name": "Статус",
  "view": true,
  "edit": { "common": false, "roles": { "Администратор": true } } }
```

Команда недоступна по умолчанию, разрешена только бухгалтеру:

```json
{ "name": "ПровестиЗакрытие",
  "use": { "common": false, "roles": { "Бухгалтер": true } } }
```

Обратный случай — доступно всем, кроме одной роли:

```json
{ "name": "РедактироватьЦену",
  "edit": { "common": true, "roles": { "Кладовщик": false } } }
```
