// Define yoursearch query
String searchQuery = '@AuraEnabled';
// List to store the apex class Ids from our search result
Map<Id,String> apexClassIdNameMap = new Map<Id,String>();
// Multi-dimentional array with the search results
sObject[][] searchResults = [FIND :searchQuery IN ALL FIELDS RETURNING ApexClass(Id,Name)];
// Iterate the multi dimensional array and populate the apexClassIdNameMap
for(Integer i=0,imax=searchResults.size();i<imax;i++){
for(Integer j=0,jmax=searchResults[i].size();j<jmax;j++){
apexClassIdNameMap.put(
(Id) searchResults[i][j].get('Id'),
(String)searchResults[i][j].get('Name')
);
}
}
// Output the search results
String resultString = 'Found: {0} result(s) that contain the search string "{1}"';
System.debug('## SEARCH RESULTS ##');
System.debug(String.format(resultString, new String[]{String.valueOf(apexClassIdNameMap.values().size()), searchQuery}));
System.debug('Apex Class names: ' + String.join(apexClassIdNameMap.values(),','));
// Query the permission sets / profiles that have access to thes apex classes from our search results
// Show profiles first, then permission sets
SetupEntityAccess[] seaRecords = [
SELECT SetupEntityId, Parent.Name, Parent.Label, Parent.IsOwnedByProfile, Parent.Profile.Name
FROM SetupEntityAccess
WHERE SetupEntityId IN :apexClassIdNameMap.keySet() AND
SetupEntityType = 'ApexClass'
ORDER BY Parent.IsOwnedByProfile DESC, Parent.Profile.Name ASC, Parent.Label ASC
];
// Output string for the debug log
String outputString = 'Apex Class :: {0} :: {1} :: {2}';
System.debug('');
System.debug('## PROFILE AND PERMISSION SET ACCESS ##');
// Output the classes with access to the debug log
for(Integer i=0,imax=seaRecords.size();i<imax;i++){
// Define if the parent is a Profile or a Permission Set
String parentType = (seaRecords[i].parent.IsOwnedByProfile) ? 'Profile' : 'Permission Set';
String parentName = (seaRecords[i].parent.IsOwnedByProfile) ? seaRecords[i].parent.Profile.Name : seaRecords[i].parent.Label;
// Output the details
System.debug(
String.format(
outputString,
new String[]{
apexClassIdNameMap.get(seaRecords[i].SetupEntityId),
parentType,
parentName
}
)
);
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter