程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。
👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻
导入模块
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
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
tokenID | UInt32 | 是 | 要校验的目标应用的身份标识。可通过应用的ApplicationInfo获得。 |
permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。 |
返回值:
类型 | 说明 |
---|---|
GrantStatus | 返回授权状态结果。 |
错误码:
以下错误码的详细介绍请参见访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The 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
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
context | StageContext | 是 | 请求权限的Ability的AbilityContext。 |
permissionList | Array | 是 | 需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。 |
callback | AsyncCallback | 是 | 回调函数,返回接口调用是否成功的结果。 |
错误码:
以下错误码的详细介绍请参见访问控制错误码。
错误码ID | 错误信息 |
---|---|
12100001 | The 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
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
permissions | Array | 是 | 否 | 用户传入的权限。 |
authResults | Array | 是 | 否 | 相应请求权限的结果:- -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改。- 0:已授权。- 2:未授权,表示请求无效,可能原因有:-未在设置文件中声明目标权限。-权限名非法。-部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件,见ohos.permission.LOCATION与ohos.permission.APPROXIMATELY_LOCATION |
如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!
技术交流群可加wx“LB-9191”备注cangjie