华为仓颉鸿蒙NEXT原生权限管理能力

100 阅读3分钟

程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。

👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻

导入模块

import ohos.ability_access_ctrl.*

class AbilityAccessCtrl

public class AbilityAccessCtrl {}

此类用于创建管理访问控制模块的实例。

static func createAtManager()

public static func createAtManager(): AtManager

访问控制管理:获取访问控制模块对象。

系统能力:SystemCapability.Security.AccessToken

返回值:

类型说明
AtManager获取访问控制模块的实例。

示例:

let atManager: AtManager = AbilityAccessCtrl.createAtManager()

type Permissions

public type Permissions = String

权限名,为一个字符串。

class AtManager

public class AtManager {}

管理访问控制模块的实例。

func checkAccessToken(UInt32, Permissions)

public func checkAccessToken(tokenID: UInt32, permissionName: Permissions): GrantStatus

校验应用是否授予权限。

系统能力:SystemCapability.Security.AccessToken

参数:

参数名类型必填说明
tokenIDUInt32要校验的目标应用的身份标识。可通过应用的ApplicationInfo获得。
permissionNamePermissions需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。

返回值:

类型说明
GrantStatus返回授权状态结果。

错误码:

以下错误码的详细介绍请参见访问控制错误码。

错误码ID错误信息
12100001The parameter is invalid.

示例:

import ohos.ability_access_ctrl.*
    
    let atManager = AbilityAccessCtrl.createAtManager()
    let tokenID = 0; // tokenID系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
    try {
        let status = atManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS")
        match (status) {
            case PERMISSION_DENIED => AppLog.info("PERMISSION_DENIED")
            case PERMISSION_GRANTED => AppLog.info("PERMISSION_GRANTED")
        }
    } catch(e: Exception) {
        AppLog.info(e.message)
    }

func requestPermissionsFromUser(StageContext, Array, AsyncCallback)

public func requestPermissionsFromUser(context: StageContext, permissionList: Array<Permissions>, callback: AsyncCallback<PermissionRequestResult>): Unit

用于拉起弹框请求用户授权。

系统能力:SystemCapability.Security.AccessToken

参数:

参数名类型必填说明
contextStageContext请求权限的Ability的AbilityContext。
permissionListArray需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。
callbackAsyncCallback回调函数,返回接口调用是否成功的结果。

错误码:

以下错误码的详细介绍请参见访问控制错误码。

错误码ID错误信息
12100001The parameter is invalid. The context is invalid when it does not belong to the application itself.

示例:

import ohos.ability_access_ctrl.*
    
    // globalcontext需要在main_ability.cj中的func onCreate中赋值:globalcontext = this.context
    func getContext(): AbilityContext {
        match(globalcontext) {
            case Some(context) => context
            case _ => throw Exception("can not get globalcontext.")
        }
    }
    
    var resultCallback = {
        errorCode: Option<AsyncError>, data: Option<PermissionRequestResult> => match (errorCode) {
            case Some(e) => AppLog.info("permissionResultCallBack request error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        for (i in (0..value.permissions.size)) {
                            AppLog.info("permissionResultCallBack: ${value.permissions[i]} - ${value.authResults[i]}")
                        }
                    case _ => AppLog.info("permissionResultCallBack request error: data is null")
                }
        }
    }
    
    let atManager = AbilityAccessCtrl.createAtManager()
    let stageContext = getStageContext(getContext())
    let permissionList = Array<String>(["ohos.permission.READ_CONTACTS", "ohos.permission.CAMERA"])
    
    atManager.requestPermissionsFromUser(stageContext, permissionList, resultCallback)

enum GrantStatus

public enum GrantStatus {
        | PERMISSION_DENIED
        | PERMISSION_GRANTED
    }

表示授权状态的枚举。

系统能力:SystemCapability.Security.AccessToken

名称说明
PERMISSION_DENIED表示未授权。
PERMISSION_GRANTED表示已授权。

struct PermissionRequestResult

public struct PermissionRequestResult {
        public PermissionRequestResult(
            public let permissions: Array<String>,
            public let authResults: Array<Int32>
        ) {}
    }

权限请求结果对象,在调用requestPermissionsFromUser申请权限时返回此对象表明此次权限申请的结果。

说明

本模块接口仅可在Stage模型下使用。

系统能力:以下各项对应的系统能力均为SystemCapability.Security.AccessToken

名称类型可读可写说明
permissionsArray用户传入的权限。
authResultsArray相应请求权限的结果:- -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改。- 0:已授权。- 2:未授权,表示请求无效,可能原因有:-未在设置文件中声明目标权限。-权限名非法。-部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件,见ohos.permission.LOCATION与ohos.permission.APPROXIMATELY_LOCATION

如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!

技术交流群可加wx“LB-9191”备注cangjie