Add permission for indexed notes & update when they change (2nd attempt)
gitlab-com/gl-infra/production#3665 (closed) must be completed before merging this: It is completed!
What does this MR do?
Related to #300351 (closed)
This change is the 2nd attempt to add new permissions fields to note documents in Elasticsearch
Original MR: !53415 (merged)
Revert MR: !54417 (merged)
The original MR did not account for all note types (specs only accounted for Noteable types: Issue, MergeRequest, Commit, and Snippet). However only those types are searchable (even though other types are indexed). We will handle the permissions for additional types in future issues (already created) and only add permissions for searchable types in this MR.
This MR:
- only adds permissions for searchable note types (issue, commit, merge request, and snippet)
- adds testing for ALL noteable types that support
include Noteable
orinclude ::Noteable
to make sure the json generated does not throw an error
How to test
You can test the json documents created by running the following commands on each note type. I would create notes of each type and verify they get the correct permissions fields when indexed. You will need notes of each type in the DB.
Test can include:
- Issue, Commit, Snippet, MergeRequest (these should have permission data added, visibility level & specific project feature level)
- Epic, AlertManagement::Alert, DesignManagement::Design, Vulnerability (visibility level is present but specific project feature level should not be present, but the method should not throw any errors)
Example
Note.where(noteable_type: Issue).first.__elasticsearch__.as_indexed_json
Output
{"id"=>1,
"note"=>"Quod nostrum sint dolore sed laudantium.",
"project_id"=>1,
"noteable_type"=>"Issue",
"noteable_id"=>1,
"created_at"=>Wed, 30 Dec 2020 20:10:45 UTC +00:00,
"updated_at"=>Wed, 30 Dec 2020 20:10:45 UTC +00:00,
"confidential"=>nil,
"issue"=>{"assignee_id"=>[1], "author_id"=>6, "confidential"=>false},
"visibility_level"=>10,
"issues_access_level"=>20,
"type"=>"note",
"join_field"=>{"name"=>"note", "parent"=>"project_1"}}
Screenshots (strongly suggested)
Does this MR meet the acceptance criteria?
Conformity
- [-] Changelog entry
- [-] Documentation (if required)
-
Code review guidelines -
Merge request performance guidelines -
Style guides - [-] Database guides
-
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. - [-] Tested in all supported browsers
- [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
- [-] Label as security and @ mention
@gitlab-com/gl-security/appsec
- [-] The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
- [-] Security reports checked/validated by a reviewer from the AppSec team