Рекомендую подумать о подходе, когда абстрактный интерфейс реализуется по-разному для разных пользователей.

Процедуры интерфейса управления оформляете с ключем EMPTY или EXTENSIBLE

## Код:
```
Пустые методы (атрибут EMPTY)

Метод может быть объявлен как пустой (empty). Пустые методы являются расширяемыми. Пустые методы очень похож на асбтрактные в том, что они являются «заглушками» для функциональности, которая может быть предоставлена в дальнейших расширениях. Однако пустые методы являются конкретными и могут вызываться. Если они не расширялись (т.е. не были реализованы), то их вызов не дает никакого эффекта.
```


Доступ к данным делаете только через процедуры. Вызов которых разный в разных реализациях.

Плюсы в том, что не надо делать большую работу по авторизации пользователей, управлению группами и т.п. Более надежная защита. Так как "секретные" реализации кода недоступны пользователям с более низкими правами.