zoukankan      html  css  js  c++  java
  • 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过程中有提及过,解析apkAndroidManifest.xml文件中的<permission>标签后得到的权限表示

      5. GrantedPermissions : 类里面定义了一个字符串列表grantedPermissions保存pkg已经被赋予的所有权限

      6. PackageSettingBase : 保存为了如pkgcodePath, resourcePath, signature等信息,同时PackageSettingBaseGrantedPermissions的子类,因为也包含了pkg被赋予的权限列表

       7. PackageSetting : PackageSetting继承了PackageSettingBase类,并新增如PackageParser.PackageSharedUserSetting

      8.  SharedUserSetting :

    二、接口的介绍以及使用

             1.  updatePermissionsLPw() : 检查无效的permissiontreepermission定义,另外一个就是根据传入的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

    四、证书的验证

      

  • 相关阅读:
    linux的一些命令
    Java中小数精确计算
    java中基本数据类型和包装类自动装箱和拆箱
    Python学习day14(内置函数二,匿名函数)
    Python学习day13(内置函数一)
    Python学习day12(生成器,列表/生成器推导式)
    Python学习day11(函数名本质,闭包及迭代器)
    Python学习day10(函数名称空间及嵌套)
    Python学习day9(函数初识)
    Python学习day8(文件操作)
  • 原文地址:https://www.cnblogs.com/liunx1109/p/10792201.html
Copyright © 2011-2022 走看看