DBus Permission Manager - DBus сервис предназначенный для управления разрешениями.
PermissionService(com.system.permissions)
- Сервис для выполнения запроса разрешение и проверки наличия определённого разрешения.TimeService(com.system.time)
- Сервис для получения системного времени.Application
- Приложение, которые обращается кcom.system.time
для получения системного времени, в случае отказа в разрешении, обращается кcom.system.permissions
для запроса разрешения.
Для сборки используется qmake
.
Перед сборкой нужно установить qt5-qmake
и qtdeclarative5-dev
.
sudo apt install qt5-qmake qtdeclarative5-dev
Два варианта сборки:
- Сборка в ручную каждого
.pro
файла.cd ./src/ProjectFolder qmake ProjectName.pro make
- Сборка при помощи
build_file
файла.chmod +x ./build_file ./build_file
В результате сборки создастся папка build в которой будут находится 3 исполняемых файла.
Переходим в папку build и запускаем файл Permission.
Сервис подключается к sessionBus по имени com.system.permissions
, его функционал представляется двумя методами:
void RequestPermission(permissionEnumCode: int)
- выдается разрешение запрашиваемому приложению, в случае корректного запроса, в случае ошибки - возвращает ошибку.
Пример использования:gdbus call -e -d com.system.permissions -o / -m com.system.permissions.RequestPermission 0
bool CheckApplicationHasPermission(applicationExecPath: String, permissionEnumCode: int)
- возвращает true в случае наличия разрешения у приложения и false - в случае отсутствия, в случае ошибки - возвращает ошибку.
Пример использования:gdbus call -e -d com.system.permissions -o / -m com.system.permissions.CheckApplicationHasPermission /usr/bin/com.example.example 0
Переходим в папку build запускаем файл и Time, предварительно должен быть запущен PermissionService
.
Сервис подключается к sessionBus по имени com.system.time
, уго функционал представляется одним методом:
uint64 GetSystemTime()
- возвращает текущее системное время в милисекундах в случае наличия разрешения на просмотр системного времени (permissionEnumCode = 0
) у вызвавшего приложения, в случае отсутствия прав - возвращает ошибкуAccess denied
и сообщениеUnauthorized Access
, в случае ошибку - возвращает ошибку.
Пример использованияgdbus call -e -d com.system.time -o / -m com.system.time.GetSystemTime
Переходим в папку build запускае файл Application, предварительно должны быть запущены PermissionService
и TimeService
.
Приложение обращается к com.system.time
и выводит текущее время в стандарте ISO 8601 при условии, что у приложения имеется разрешения на просмотр системного времени, в случае отсутствия данного разрешения - обращается к com.system.permissions
для получения разрешения и выводит время, если разрешения было получено.