Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SHS-5907: Implementation: Editors can easily set "view" access for Private Pages #1679

Open
wants to merge 26 commits into
base: 11.6.1-release
Choose a base branch
from

Conversation

codechefmarc
Copy link
Collaborator

@codechefmarc codechefmarc commented Nov 5, 2024

READY FOR REVIEW

Summary

  • Adds a new contrib module content_access_simple that adds a simpler interface for settings view permissions per node.

Need Review By (Date)

2024-11-06

Urgency

low

Steps to Test

  1. Login to the site as an admin
  2. Create a Private Page
  3. Title it
  4. Verify there is a new area below all of the fields called "Access and Permissions"

Screenshot 2024-11-05 at 2 01 24 PM

  1. Open it up and verify that there is a list of roles under "Visibility" but there is not "Developer", "Anonymous", or "Authenticated".
  2. Choose a role, like "Site Manager" and enable view access
  3. Save the node
  4. Visit the "Access control" tab for this node
  5. Verify that under "View any hs_private_page content", the "Site Manager" is checked in addition to "Developer" and "Authenticated user" (which were the defaults originally but they are hidden as per config)
  6. Uncheck "Authenticated user" under view any here, and save
  7. Attempt to view the page on a logged in user who is not "Site Manager" role and verify that you cannot access it
  8. Attempt to view the page on a logged in user who is "Site Manager" and verify that you can access it
  9. Edit the node and verify that under "Access and Permissions" you get a "complex" warning and no roles are listed

Screenshot 2024-11-05 at 1 59 39 PM

  1. To fix, visit the content type permissions at /admin/structure/types/manage/hs_private_page/access and also uncheck "Authenticated user" and save
  2. Edit the node again and this time, and this time, mark the node as unpublished and save
  3. Edit the node and verify that under "Access and Permissions" you get a "unpublished" warning but the roles are still listed

Screenshot 2024-11-05 at 1 59 19 PM

  1. Visit /admin/structure/types/manage/hs_private_page/form-display and drag the "Content Access Simple" "field" to another place in the form and save
  2. Edit the node and verify that the Access and Permissions has moved.

PR Checklist


@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 18:50 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 19:17 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 19:35 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 21:14 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 21:25 Destroyed
@codechefmarc codechefmarc self-assigned this Nov 5, 2024
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 22:04 Destroyed
@codechefmarc codechefmarc requested a review from dalin- November 5, 2024 22:04
@codechefmarc codechefmarc marked this pull request as ready for review November 5, 2024 22:38
@ahughes3 ahughes3 temporarily deployed to Tugboat November 5, 2024 22:57 Destroyed
Copy link
Collaborator

@dalin- dalin- left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Phewph, that's a lot to review.

First up, the the code in the other repo:


https://github.com/codechefmarc/content_access_simple/blob/9b9135ad1b89dcaebe908673c102fa7063fd7deb/content_access_simple.info.yml#L5
We might be able to get a jump and call it 11 compatible?


https://github.com/codechefmarc/content_access_simple/blob/9b9135ad1b89dcaebe908673c102fa7063fd7deb/content_access_simple.module#L46
We also need to check if the extra field has actually been enabled. Something like

$fieldIsEnabled = $display->getComponent('content_access_simple');

https://github.com/codechefmarc/content_access_simple/blob/9b9135ad1b89dcaebe908673c102fa7063fd7deb/src/AccessManager.php#L72

I'm not sure it's a good idea to include "own access" here. In the spec it talks about mostly ignoring the whole concept (i.e. if you're doing stuff with "own access", then it's no longer "simple").


https://github.com/codechefmarc/content_access_simple/blob/9b9135ad1b89dcaebe908673c102fa7063fd7deb/content_access_simple.module#L92

How does Content Access work without our custom module installed? If you create a new node, then change the defaults for that bundle, does the node use the old defaults, or the new defaults? I suspect the former (and our new module will do the same), but if it's the latter, then we'll need to update our code to match.


And then from functional testing:

  • Need to rename "Authenticated" as "All logged in users" (just on this form, not globally)
  • Need help text "Only the chosen roles will be able to view this content..." this needs to be configurable.
  • Unpublished message doesn't match the spec', and needs to be configurable.
  • I'm not sure that your plan for not disabling checkboxes will work. Site Manager needs to be visible but disabled.

Base automatically changed from 11.5.1-release to develop November 13, 2024 15:35
@ahughes3 ahughes3 temporarily deployed to Tugboat November 14, 2024 23:31 Destroyed
@codechefmarc
Copy link
Collaborator Author

@dalin- Updated the code and here are my comments on yours:

  1. Drupal 11 - updated the info file and did a check with Upgrade Status module so it is ready for D11
  2. Good catch on checking to see if the field is enabled in the default display. I added that feature in.
  3. The "own access" here (https://github.com/codechefmarc/content_access_simple/blob/9b9135ad1b89dcaebe908673c102fa7063fd7deb/src/AccessManager.php#L72) is actually our own module permissions, not content access. However, I see your point in wanting to make this module more simple, so I removed it and there is only one permission to use this module now.
  4. In content access, they do not show the "Access control" tab when you first create a node. They only show it after the fact on the edit page. The defaults come from the content type settings itself via content_access_node_access_records which is a hook that sets permissions on node save. It, in turn calls this line: return $grants[$node->id()][$op] ?? content_access_get_settings($op, $node->getType()); which essentially gets the per node setting, but if that doesn't exist, use the setting from the content type. Since we're showing our form elements on the add page, we need a way to get the defaults first. Unless you want to follow content access and not show our stuff on the add page and instead only show it on the edit page?
  5. Renamed "Authenticated" to "All logged in users"
  6. Help text added and is part of the config
  7. For the unpublished message - I did make this dynamic and list roles who can view unpublished based on the View Unpublished module permissions which Stanford has, but, not all sites will have that module. So, I can also add a config-based unpublished message that will take precedence if set in config. I like the idea of the dynamic one, but it does sort of depend on the view unpublished module. I'm out of hours for this project this week, so I'll make that change next week.
  8. Added logic and config for disabled roles. When I first read the spec, I didn't get it and was going to reach out to you, but I understand now.
  9. We can certainly hide Stanford specific roles with their config, and I'll do that in this PR to test next week. As part of the module, I only hid the ones that made sense out of the gate for contrib.

@dalin-
Copy link
Collaborator

dalin- commented Nov 15, 2024

@codechefmarc

Since we're showing our form elements on the add page, we need a way to get the defaults first. Unless you want to follow content access and not show our stuff on the add page and instead only show it on the edit page?

Makes sense. No changes needed.

For the unpublished message... I'm out of hours for this project this week, so I'll make that change next week.

Sounds good.

As part of the module, I only hid the ones that made sense out of the gate for contrib.

Ooooh, smart.


On
https://hs-traditional-nibcuwfk1qrcj3cnraoyrgs4360qz81k.tugboatqa.com/
I masqueraded as "Lindsey" who is a Site Manager
Screenshot 2024-11-15 at 9 39 05 AM
When I try to edit an existing private page, our new field is not there
Screenshot 2024-11-15 at 9 39 19 AM

But maybe this is more about generic config vs our config.


Lastly, there's a lot of code changed in this PR that seems unrelated. Maybe it needs to merge in the source branch.

@codechefmarc codechefmarc changed the base branch from develop to 11.5.2-release November 15, 2024 17:07
@codechefmarc
Copy link
Collaborator Author

Ahh, for "Lindsey", I know why - we have permissions for our module too and that wasn't set as part of this PR. I'll need to make that change for Site Managers in the config and do an update hook as well.

And yup, I had the base incorrect for the merge, so I changed it to the 11.5.2 release branch as the base and now there's only a handful of files changed.

However, I'd like to discuss with you how we do this deploy - if we do want this as a contrib module, once we get everything buttoned up, I'll upload to Drupal.org then change composer.json to point to that version and not my repo.

@dalin-
Copy link
Collaborator

dalin- commented Nov 15, 2024

@cienvaras

However, I'd like to discuss with you how we do this deploy - if we do want this as a contrib module, once we get everything buttoned up, I'll upload to Drupal.org then change composer.json to point to that version and not my repo.

You might want to bring this up in your weekly call with Albert + SWS. I'm happy to let you handle it, or let me know if you want my opinion.

@cienvaras
Copy link
Collaborator

@dalin-

You might want to bring this up in your weekly call with Albert + SWS. I'm happy to let you handle it, or let me know if you want my opinion.

We don't have meeting with SWS, but I can ask Joe on the chat. I'd like your opinion though, I haven't been fully involved on this ticket and there are things I might be missing.

@dalin-
Copy link
Collaborator

dalin- commented Nov 15, 2024

@cienvaras
I suspect that we'll need to go through a couple of rounds on this:

  1. Get SWS review on the generic module.
  2. Get H&S review of the UI/UX.
  3. Publish it to drupal.org
  4. Create a follow-up task to integrate the contrib module into our site.

Base automatically changed from 11.5.2-release to develop November 20, 2024 16:11
@ahughes3 ahughes3 temporarily deployed to Tugboat December 11, 2024 01:28 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 11, 2024 01:43 Destroyed
@codechefmarc
Copy link
Collaborator Author

@dalin- Reverted many of the changes in composer.lock except for the content_access_simple stuff. Also, in the d.o. repo, thank you for the comments, I did change things to use the Xss filter, great idea.

Copy link
Collaborator

@dalin- dalin- left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚢

@cienvaras cienvaras requested review from ahughes3 and removed request for joegl December 12, 2024 23:46
@cienvaras
Copy link
Collaborator

@ahughes3 This one is ready for you to review.

@ahughes3 ahughes3 temporarily deployed to Tugboat December 13, 2024 22:37 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 16, 2024 20:09 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 16, 2024 20:40 Destroyed
@ahughes3
Copy link
Collaborator

@cienvaras @codechefmarc @dalin- We are still receiving the MySQL error has gone away message when attempting to save. What steps did you all take when testing to resolve on Tugboat?

It looks like the pr with recommended fix was merged but maye this line should be added as well to the config file

- echo "max_allowed_packet=536870912" >> /etc/mysql/conf.d/tugboat.cnf

Also in the UI we noticed that this image was not the same as the image in the testing results

image

@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 06:04 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 08:18 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 14:56 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 17:10 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 18:58 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 19:12 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 19:22 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 19:39 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 19:54 Destroyed
@ahughes3 ahughes3 temporarily deployed to Tugboat December 17, 2024 21:04 Destroyed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants