Hi,
In this sample script, the package upgrade contains new Visualforce pages and a new permission set that grants access to those pages. The script performs the following actions.
- Gets the Id of the Visualforce pages in the old version of the package
- Gets the permission sets that have access to those pages
- Gets the list of profiles associated with those permission sets
- Gets the list of users who have those profiles assigned
- Assigns the permission set in the new package to those users
Eg:
global class PostInstallClass implements InstallHandler {
global void onInstall(InstallContext context) {
//Get the Id of the Visualforce pages
List<ApexPage> pagesList = [SELECT Id FROM ApexPage WHERE NamespacePrefix =
'TestPackage' AND Name = 'vfpage1'];
//Get the permission sets that have access to those pages
List<SetupEntityAccess> setupEntityAccessList = [SELECT Id,
ParentId, SetupEntityId, SetupEntityType FROM SetupEntityAccess
WHERE SetupEntityId IN :pagesList];
Set<ID> PermissionSetList = new Set<ID> ();
for (SetupEntityAccess sea : setupEntityAccessList) {
PermissionSetList.add(sea.ParentId);
}
List<PermissionSet> PermissionSetWithProfileIdList =
[SELECT id, Name, IsOwnedByProfile, Profile.Name,
ProfileId FROM PermissionSet WHERE IsOwnedByProfile = true
AND Id IN :PermissionSetList];
//Get the list of profiles associated with those permission sets
Set<ID> ProfileList = new Set<ID> ();
for (PermissionSet per : PermissionSetWithProfileIdList) {
ProfileList.add(per.ProfileId);
}
//Get the list of users who have those profiles assigned
List<User> UserList = [SELECT id FROM User where ProfileId IN :ProfileList];
//Assign the permission set in the new package to those users
List<PermissionSet> PermissionSetToAssignList = [SELECT id, Name
FROM PermissionSet WHERE Name='TestPermSet' AND
NamespacePrefix = 'TestPackage'];
PermissionSet PermissionSetToAssign = PermissionSetToAssignList[0];
List<PermissionSetAssignment> PermissionSetAssignmentList = new List<PermissionSetAssignment>();
for (User us : UserList) {
PermissionSetAssignment psa = new PermissionSetAssignment();
psa.PermissionSetId = PermissionSetToAssign.id;
psa.AssigneeId = us.id;
PermissionSetAssignmentList.add(psa);
}
insert PermissionSetAssignmentList;
}
}
Test Class:
// Test for the post install class
@isTest
private class PostInstallClassTest {
@isTest
public static void test() {
PostInstallClass myClass = new PostInstallClass();
Test.testInstall(myClass, null);
}
}
Referene:
No comments:
Post a Comment