跳到正文
Yayin Story Studio Yayin Story Studio 项目文档

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,以免插件申请用户完全不了解的权限。

作为例外,主插件与依赖插件不受权限系统约束:若 whoVIApplication::getMainPlugin()返回的插件, 或包含在VIApplication::getDependencyPlugins()中,则无论其是否声明过权限,本函数一律返回true。 它们本身就是应用程序的可信组成部分,其能力边界由应用程序自行负责。 请注意,这一判定依据取自VIApplication的登记结果,而非插件自己声明的Plugin::getLoadType()。

结论的优先级为:已拒绝 &gt; 已允许 &gt; 询问用户。被拒绝的权限不会再次询问用户, 如需撤销结论,请修改主程序插件配置中的对应数组。 当 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 开始支持。