Visindigo::General::PluginPermissionManager Class
class Visindigo::General::PluginPermissionManager插件权限的审计与记录中心. 详情...
| 头文件: | #include <PluginPermissionManager> |
| 自以下版本: | Visindigo 0.17.0 |
公开成员函数
(自 Visindigo 0.17.0 引入) Visindigo::General::Plugin::Permissions | getAllowedPermissions(Visindigo::General::Plugin *who) |
(自 Visindigo 0.17.0 引入) Visindigo::General::Plugin::Permissions | getRejectedPermissions(Visindigo::General::Plugin *who) |
(自 Visindigo 0.17.0 引入) bool | hasPermission(Visindigo::General::Plugin *who, Visindigo::General::Plugin::Permission perm, bool autoRequest = false) |
(自 Visindigo 0.17.0 引入) bool | requestPermission(Visindigo::General::Plugin *who, Visindigo::General::Plugin::Permission perm) |
(自 Visindigo 0.17.0 引入) void | setPermissionRequestHandler(Visindigo::General::PluginPermissionRequestHandler *handler) |
静态公开成员
(自 Visindigo 0.17.0 引入) Visindigo::General::PluginPermissionManager * | getInstance() |
详细说明
权限记录寄存在主程序插件的配置中,形式为下面两个字符串数组:
_visindigo_auto_.Permissions.<插件ID>.Allowed = ["FileRead", "Network"] _visindigo_auto_.Permissions.<插件ID>.Rejected = ["RunAnyCommand"]
数组元素为Plugin::Permission的枚举键名,便于用户直接阅读、修改或撤销结论。 被允许或拒绝的结论一经写入即长期生效,且被拒绝的权限不会再次询问用户。
若主程序插件尚未就绪(例如插件在应用初始化早期就申请权限), 结论只保留在内存中而不落盘,待主程序插件就绪后的下一次申请再行写入。
成员函数文档
[since Visindigo 0.17.0] Visindigo::General::Plugin::Permissions PluginPermissionManager::getAllowedPermissions(Visindigo::General::Plugin *who)
who 被查询的插件。 return 该插件当前已被允许的全部权限。
这个function 从 Visindigo 0.17.0 开始支持。
[static, since Visindigo 0.17.0] Visindigo::General::PluginPermissionManager *PluginPermissionManager::getInstance()
return 权限管理器实例。首次调用时创建,实例在程序生命周期内持续存在。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::General::Plugin::Permissions PluginPermissionManager::getRejectedPermissions(Visindigo::General::Plugin *who)
who 被查询的插件。 return 该插件当前已被拒绝的全部权限。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] bool PluginPermissionManager::hasPermission(Visindigo::General::Plugin *who, Visindigo::General::Plugin::Permission perm, bool autoRequest = false)
who 发起申请的插件。 perm 被查询的权限。 autoRequest 当该权限尚无结论时,是否允许向用户发起询问。 return 当前是否拥有该权限。
只有插件在自身通过setRequiredPermissions声明的权限范围内才会被审计, 未声明的权限一律返回false,以免插件申请用户完全不了解的权限。
作为例外,主插件与依赖插件不受权限系统约束:若 who 是VIApplication::getMainPlugin()返回的插件, 或包含在VIApplication::getDependencyPlugins()中,则无论其是否声明过权限,本函数一律返回true。 它们本身就是应用程序的可信组成部分,其能力边界由应用程序自行负责。 请注意,这一判定依据取自VIApplication的登记结果,而非插件自己声明的Plugin::getLoadType()。
结论的优先级为:已拒绝 > 已允许 > 询问用户。被拒绝的权限不会再次询问用户, 如需撤销结论,请修改主程序插件配置中的对应数组。 当 autoRequest 为false时,未决的权限不会打扰用户,直接返回false; 若为true但应用程序未安装处理器,同样返回false(fail-closed)。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] bool PluginPermissionManager::requestPermission(Visindigo::General::Plugin *who, Visindigo::General::Plugin::Permission perm)
who 发起申请的插件。 perm 被申请的权限。 return 申请是否被批准。
等价于以 autoRequest 为 true 调用 hasPermission,即允许向用户发起询问。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] void PluginPermissionManager::setPermissionRequestHandler(Visindigo::General::PluginPermissionRequestHandler *handler)
handler 权限请求处理器,传nullptr表示卸载。
设置用于询问用户的权限请求处理器。本类不接管 handler 的所有权, 调用方需保证它在被卸载前一直有效。
这个function 从 Visindigo 0.17.0 开始支持。