diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-02-26 14:44:43 -0800 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2015-03-23 18:50:35 -0700 |
commit | c6d1c345f41cf817bf2c07c97b97107d94296064 (patch) | |
tree | 4bb0bac510ae49524f25a71e3f9e73f5f78cf36f /cmds/pm | |
parent | 3910eb551c7736015708c627dcabaa75c66d9ec3 (diff) | |
download | frameworks_base-c6d1c345f41cf817bf2c07c97b97107d94296064.zip frameworks_base-c6d1c345f41cf817bf2c07c97b97107d94296064.tar.gz frameworks_base-c6d1c345f41cf817bf2c07c97b97107d94296064.tar.bz2 |
Runtime permissions: per user permission tracking.
Before all permissions were granted at install time at once, so the user
was persented with an all or nothing choice. In the new runtime permissions
model all dangarous permissions (nomal are always granted and signature
one are granted if signatures match) are not granted at install time and
the app can request them as necessary at runtime.
Before, all granted permission to an app were identical for all users as
granting is performed at install time. However, the new runtime model
allows the same app running under two different users to have different
runtime permission grants. This change refactors the permissions book
keeping in the package manager to enable per user permission tracking.
The change also adds the app facing APIs for requesting runtime permissions.
Change-Id: Icbf2fc2ced15c42ca206c335996206bd1a4a4be5
Diffstat (limited to 'cmds/pm')
-rw-r--r-- | cmds/pm/src/com/android/commands/pm/Pm.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index c48a618..f38b9e7 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -1517,6 +1517,15 @@ public final class Pm { } private int runGrantRevokePermission(boolean grant) { + int userId = UserHandle.USER_CURRENT; + + String opt = null; + while ((opt = nextOption()) != null) { + if (opt.equals("--user")) { + userId = Integer.parseInt(nextArg()); + } + } + String pkg = nextArg(); if (pkg == null) { System.err.println("Error: no package specified"); @@ -1529,11 +1538,12 @@ public final class Pm { showUsage(); return 1; } + try { if (grant) { - mPm.grantPermission(pkg, perm); + mPm.grantPermission(pkg, perm, userId); } else { - mPm.revokePermission(pkg, perm); + mPm.revokePermission(pkg, perm, userId); } return 0; } catch (RemoteException e) { @@ -1815,8 +1825,8 @@ public final class Pm { System.err.println(" pm disable-until-used [--user USER_ID] PACKAGE_OR_COMPONENT"); System.err.println(" pm hide [--user USER_ID] PACKAGE_OR_COMPONENT"); System.err.println(" pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT"); - System.err.println(" pm grant PACKAGE PERMISSION"); - System.err.println(" pm revoke PACKAGE PERMISSION"); + System.err.println(" pm grant [--user USER_ID] PACKAGE PERMISSION"); + System.err.println(" pm revoke [--user USER_ID] PACKAGE PERMISSION"); System.err.println(" pm set-install-location [0/auto] [1/internal] [2/external]"); System.err.println(" pm get-install-location"); System.err.println(" pm set-permission-enforced PERMISSION [true|false]"); @@ -1889,8 +1899,9 @@ public final class Pm { System.err.println(" as \"package/class\")."); System.err.println(""); System.err.println("pm grant, revoke: these commands either grant or revoke permissions"); - System.err.println(" to applications. Only optional permissions the application has"); - System.err.println(" declared can be granted or revoked."); + System.err.println(" to apps. The permissions must be declared as used in the app's"); + System.err.println(" manifest, be runtime permissions (protection level dangerous),"); + System.err.println(" and the app targeting SDK greater than Lollipop MR1."); System.err.println(""); System.err.println("pm get-install-location: returns the current install location."); System.err.println(" 0 [auto]: Let system decide the best location"); |