Problem/Motivation
While creating reports for some of the users on one of the sites I'm currently working on, I realized that they should be reachable from the Reports menu, not the Content menu, which is where we've been putting our custom reports up to this point.
When I masqueraded as one of the users (a non-admin user) who would access these reports, I found that some dblog reports were still visible in the menu. This led me to find that the dblog reports' permissions are based on the 'access site reports' permission, which is the same permission used to grant access to the Reports menu item (specifically the system.admin_reports route in web/core/modules/system/system.routing.yml).
There should be a permission specific to the dblog module that grants access to dblog-related reports to prevent users who shouldn't see these reports from being able to see them.
Proposed resolution
I propose the following changes:
- Add an 'access dblog reports' permission
- Change the permission requirement on all dblog routes from 'access site reports' to 'access dblog reports'
Remaining tasks
Write tests to ensure the 'access dblog reports' permission works as intended.
User interface changes
Users with the 'access site reports' permission but without the 'access dblog reports' permission will no longer be able to access dblog reports. Users who should be able to access these reports will need the 'access dblog reports' permission added to at least one of their assigned roles.
UPDATE!: In the most recent push to the branch I added an update hook that will add the 'access dblog reports' permission to any roles that have the 'access site reports' permission. This way users won't lose access to the reports.
Introduced terminology
None.
API changes
None.
Data model changes
None.
Release notes snippet
- Added the 'access dblog reports' permission to control access to dblog routes.
- Updated dblog routes to use the 'access dblog reports' permission.
| Comment | File | Size | Author |
|---|---|---|---|
| #15 | Screenshot_2025-04-08_11-02-40.png | 71.89 KB | dagmar |
| #8 | 3493583-add-dblog-specific-permissions--10-3-x--8.patch | 6.19 KB | jsutta |
Issue fork drupal-3493583
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
jsutta commentedAdding a patch for 10.3.x (that's our current branch) in case anyone else can use it.
Comment #4
jsutta commentedComment #5
jsutta commentedComment #6
jsutta commentedComment #7
jsutta commentedUpdated the patch as I missed a couple uses of the 'access site reports' permission.
Comment #8
jsutta commentedOne more new version of the patch. I forgot to add dblog.permissions.yml to the previous versions.
Comment #9
smustgrave commentedSo I wonder if we will need an upgrade hook for the view change, maybe not though since we aren't removing a permission.
The update hook will need test coverage though.
Probably need to expand on the existing tests too that if I have 'access site reports' then I can't access the logs
And other side if I have 'access dblogs reports' then I can still get to the "Reports" tab but it only contains the one link
Appears to have test failures also.
Comment #10
jsutta commented@smustgrave Thank you for the suggestions and I apologize it took me so long to circle back to this.
Here's a summary of the latest changes:
This is the first time I've written these types of tests, so please double-check them and let me know if anything is missing or incorrect.
Also, I haven't addressed the test failures yet. I hope to do so within the next couple days.
Comment #11
jsutta commented@smustgrave I finally got the tests completed and all are now passing. Would you take another look at it and let me know if any other changes need to be made?
Comment #12
jsutta commentedComment #13
dagmar@jsutta Thanks for the patch!
There are a few files that are outside dblog but will need an upgrade as well:
Here are a bunch of patters to check:
rg 'dblog' | rg 'access site reports'And the following files reference the dblog routing as well, so it may be worth to check the permissions there:
Comment #14
jsutta commented@dagmar Thank you for the catches! I've added the
access dblog reportspermission in the other locations where theaccess site reportswas already being used, with one exception:In
modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeExecuteTestBase.php: The user in this test is the root user (uid 1), so should implicitly have all permissions. With that in mind there's no need to set the specific permission.Comment #15
dagmarThanks @jsutta Please take a look to the rest of the failing tests in https://git.drupalcode.org/issue/drupal-3493583/-/pipelines/461051
Comment #16
jsutta commented@dagmar Thank you for pointing these out. I believe I've fixed all of the failed tests at this point, but please review the results and let me know if I missed anything.
Comment #17
smustgrave commentedUpgrade path tests seem to be added so removing that tag
Still appears to need a CR so moving to NW for that.
Will let @dagmar do the final review before RTBC as he seems to have more knowledge with this code already.
Comment #18
dagmarIt seems there is a missing change to do to fix the Nighwatch related tests.
Comment #19
jsutta commentedBeen picking away at this and I'm at the point where I need some help with the tests.
The only remaining PHPUnit test issues are related to the issue below. I checked the default config for the Watchdog table in
views.view.watchdog.ymland found that there's no default class provided. At this point I think fixing this is outside the scope of this issue, but I'm more than happy to fix it if anyone feels it should be included.The update to add a default table CSS class for view "watchdog" is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. Profile, module and theme provided configuration should be updated. See <a href="https://www.drupal.org/node/3499943">https://www.drupal.org/node/3499943</a>.The PHPUnit Functional JavaScript errors are also unrelated:
Behat\Mink\Exception\ExpectationException: The string "Added text format ckeditor5." was not found anywhere in the HTML response of the current page.As for Nightwatch, the error is below. I don't believe it's related to the changes in this issue:
An error occurred while running .click() command on <input[name="i5byg6bay[administer modules]"]>: element click intercepted: Element <input class="rid-i5byg6bay js-rid-i5byg6bay form-checkbox" data-drupal-selector="edit-i5byg6bay-administer-modules" type="checkbox" id="edit-i5byg6bay-administer-modules" name="i5byg6bay[administer modules]" value="1"> is not clickable at point (674, 52). Other element would receive the click: <th class="checkbox">...</th>I'm happy to continue digging into the test results, but at this point I don't feel like there's much more I can do.
Comment #20
dagmar@jsutta I think the problem here is the way we are updating the Watchdog table. Potentially any other view could be be using the
access dblog reportspermission and we want to make sure those views are updated as well.The way this is done is via the
ViewsConfigUpdater. See for example this functionConverting the code from
dblog_update_112002into theViewsConfigUpdatershould point you in the right direction.The test you mentioned are failing because a deprecation triggered by #3045871: Add "Table class" option to views table formatter UI which is caused by how the view is saved.
Comment #22
jsutta commented@dagmar I finally had a chance to take a look at your last suggestion. I haven't used this method to update config before. Would you mind checking my logic to make sure I'm on the right track?
Convert
dblog_update_112002to the following, which would be indblog.post_update.php:Comment #23
jsutta commented@here Sorry for all the git spam! I rebased the issue branch against 11.3.x and resolved a bunch of issues from that. I'll see about fixing the remaining test issues so hopefully this can start moving forward again.