程序访问控制管理
程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。
本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
abilityAccessCtrl.createAtManager
createAtManager(): AtManager
访问控制管理:获取访问控制模块对象。
系统能力: SystemCapability.Security.AccessToken
返回值:
类型 | 说明 |
---|---|
获取访问控制模块的实例。 |
示例:
- let atManager = abilityAccessCtrl.createAtManager();
checkAccessToken9+
checkAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus>
校验应用是否授予权限。使用Promise异步回调。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的ApplicationInfo获得。 |
permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在系统权限定义列表中查询。 |
返回值:
类型 | 说明 |
---|---|
Promise<GrantStatus> | Promise对象。返回授权状态结果。 |
错误码:
以下错误码的详细介绍请参见程序访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. |
示例:
- import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
- let atManager = abilityAccessCtrl.createAtManager();
- let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
- try {
- atManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
- console.log(`checkAccessToken success, data->${JSON.stringify(data)}`);
- }).catch((err) => {
- console.log(`checkAccessToken fail, err->${JSON.stringify(err)}`);
- });
- } catch(err) {
- console.log(`catch err->${JSON.stringify(err)}`);
- }
verifyAccessTokenSync9+
verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
校验应用是否被授予权限,同步返回结果。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
tokenID | number | 是 | 要校验应用的身份标识。可通过应用的ApplicationInfo获得。 |
permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在系统权限定义列表中查询。 |
返回值:
类型 | 说明 |
---|---|
枚举实例,返回授权状态。 |
错误码:
以下错误码的详细介绍请参见程序访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. |
示例:
- let atManager = abilityAccessCtrl.createAtManager();
- let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
- let data = atManager.verifyAccessTokenSync(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
- console.log(`data->${JSON.stringify(data)}`);
verifyAccessToken9+
verifyAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus>
校验应用是否授予权限。使用Promise异步回调。
建议使用checkAccessToken替代。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的ApplicationInfo获得。 |
permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在系统权限定义列表中查询。 |
返回值:
类型 | 说明 |
---|---|
Promise<GrantStatus> | Promise对象。返回授权状态结果。 |
示例:
- import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
- let atManager = abilityAccessCtrl.createAtManager();
- let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
- let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
- promise.then(data => {
- console.log(`promise: data->${JSON.stringify(data)}`);
- });
requestPermissionsFromUser9+
requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>) : void;
用于UIAbility拉起弹框请求用户授权。使用callback异步回调。
非UIAbility不支持调用本函数。
模型约束:此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 |
permissionList | Array<Permissions> | 是 | 权限名列表,合法的权限名取值可在系统权限定义列表中查询。 |
callback | AsyncCallback<PermissionRequestResult> | 是 | 回调函数,返回接口调用是否成功的结果。 |
错误码:
以下错误码的详细介绍请参见程序访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
示例:
- import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
- let atManager = abilityAccessCtrl.createAtManager();
- try {
- atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"], (err, data)=>{
- console.info("data:" + JSON.stringify(data));
- console.info("data permissions:" + data.permissions);
- console.info("data authResults:" + data.authResults);
- });
- } catch(err) {
- console.log(`catch err->${JSON.stringify(err)}`);
- }
requestPermissionsFromUser9+
requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>) : Promise<PermissionRequestResult>;
用于UIAbility拉起弹框请求用户授权。使用promise异步回调。
非UIAbility不支持调用本函数。
模型约束:此接口仅可在Stage模型下使用。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 |
permissionList | Array<Permissions> | 是 | 需要校验的权限名称,合法的权限名取值可在系统权限定义列表中查询。 |
返回值:
类型 | 说明 |
---|---|
Promise<PermissionRequestResult> | 返回一个Promise,包含接口的结果。 |
错误码:
以下错误码的详细介绍请参见程序访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
示例:
- import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
- let atManager = abilityAccessCtrl.createAtManager();
- try {
- atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"]).then((data) => {
- console.info("data:" + JSON.stringify(data));
- console.info("data permissions:" + data.permissions);
- console.info("data authResults:" + data.authResults);
- }).catch((err) => {
- console.info("data:" + JSON.stringify(err));
- })
- } catch(err) {
- console.log(`catch err->${JSON.stringify(err)}`);
- }
verifyAccessToken(deprecated)
verifyAccessToken(tokenID: number, permissionName: string): Promise<GrantStatus>
校验应用是否授予权限。使用Promise异步回调。
从API version 9开始不再维护,建议使用checkAccessToken替代。
系统能力: SystemCapability.Security.AccessToken
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的ApplicationInfo获得。 |
permissionName | string | 是 | 需要校验的权限名称。 |
返回值:
类型 | 说明 |
---|---|
Promise<GrantStatus> | Promise对象。返回授权状态结果。 |
示例:
- import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
- let atManager = abilityAccessCtrl.createAtManager();
- let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
- let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
- promise.then(data => {
- console.log(`promise: data->${JSON.stringify(data)}`);
- });
更多建议: