- Issue created by @tlo405
I've been looking into the new access policy API introduced in Drupal 10.3, and while it works for the most part, I am seeing some caching issues that I'm trying to figure out. My project now has a bunch of config overrides which assigns roles/permissions on the fly, but I've been looking into removing these overrides in favor of the access policy API.
This isn't my exact scenario...but for instance, say I have something like this:
public function calculatePermissions(AccountInterface $account, string $scope): RefinableCalculatedPermissionsInterface {
$calculated_permissions = parent::calculatePermissions($account, $scope);
if (!in_array('content_type_manager', $account->getRoles())) {
return $calculated_permissions;
}
// Get a list of all available content types.
$types = $this->entityTypeManager->getStorage('node_type')->loadMultiple();
// Loop through each content type.
foreach ($types as $type) {
$calculated_permissions
->addItem(new CalculatedPermissionsItem(['create ' . $type . ' content']));
}
return $calculated_permissions;
}
If a user has the content_type_manager
role, I want them to be able to create content for any content type. If not, then I don't want that permission assigned to them.
This seems to work fine... however in my functional test, when I create a new content type:
$this->drupalcreateContentType([
'type' => 'new_content_type',
'name' => 'New content type'
]);
then attempt to log in with a user that has the content_type_manager
role, I'm getting a 403 when I visit node/add/new_content_type
. If I force my test to clear caches right before that (using something like $this->resetAll();
), then it works fine. However, I obviously don't want to force a cache clear here to solve this problem.
I'm still learning the access policy API, but I seem to be missing something here. I never had problems assigning config overrides when it came to the example above, but I'm having difficulty figuring out what I need to do to get this to work.
Any suggestions would be greatly appreciated!
Thanks
Active
10.3 ✨