PMS权限管理和鉴权过程
一、权限的管理基础知识
1.系统的权限机制分为:权限解析、权限分配、鉴权、动态添加权限
2.PermissionInfo : PackageParser.Permission中包含一个对应的PermissionInfo,权限信息的表示,其中包含权限等级的定义(NORMAL, DANGER, SIGNERATURE),另外实现了序列化,用户于进程间通信
3. BasePermission : 系统权限的基本表示单元是BasePermission,Settings中维护了一个总的权限映射表mPermissions,所有的权限都会添加到mPermissions列表中,其中key是权限的名字,value是具体的BasePermission实例
4. PackageParser.Permission : PackageParser.Permission在上面分析PackageParser解析apk过程中有提及过,解析apk的AndroidManifest.xml文件中的<permission>标签后得到的权限表示
5. GrantedPermissions : 类里面定义了一个字符串列表grantedPermissions保存pkg已经被赋予的所有权限
6. PackageSettingBase : 保存为了如pkg的codePath, resourcePath, signature等信息,同时PackageSettingBase是GrantedPermissions的子类,因为也包含了pkg被赋予的权限列表
7. PackageSetting : PackageSetting继承了PackageSettingBase类,并新增如PackageParser.Package和SharedUserSetting
8. SharedUserSetting :
二、接口的介绍以及使用
1. updatePermissionsLPw() : 检查无效的permissiontree和permission定义,另外一个就是根据传入的flags是否带有UPDATE_PERMISSIONS_ALL来遍历mPackages包列表来更新所有安装包的权限信息
2. grantPermissionsLPw() : 管理两个重大的类,安装和运行权限两个大类
三、验证权限的过程:
一般客户端调用checkPermission方法鉴权的流程如下:
①Context.java--->public int checkPermission(String permission, int pid, int uid)
②ActivityManagerService.java--->public int checkPermission(String permission, int pid, int uid)
③ActivityManagerService.java---> checkComponentPermission
④ActivityManager.java--->checkComponentPermission
Root用户(uid=0)和System用户(uid=1000)直接鉴权通过。
⑤PackageManagerService.java--->checkUidPermission
四、证书的验证
posted on 2019-04-29 18:36 zhang11111wei 阅读(885) 评论(0) 编辑 收藏 举报