Merged
Conversation
…roughout core actions; tests on the same, along with a new ExamplePersonalizer that tests can use
…ng values for fields that aren't in the table. BREAKING CHANGE: Previously the memory backend was very loose, and just stored QRecords without regard to what fields were in them, which applications may have taken advantage of, to store values that aren't fields in the table. But, with the advent of table personalization, and the notion that a backend should not return values that aren't part of the active user's table, the memory backend now removes any field/value pairs from records that are not valid fields in the table.
…personalization - namely, around stricter behavior in memory backend re: unrecognized fields.
… validation to CountAction BREAKING CHANGE: application code that supplied unrecognized field names to count actions in the past used to be up to the specific backend module what to do with them (e.g., RDBMS would fail, but memory would silently ignore). Now, before we get into the backend module, we will validate field names in criteria and order by elements of the filter. This feels like the right thing to always do, and good to be standardized - but it is a (breaking) change in behavior.
BREAKING CHANGE: application code that supplied unrecognized field names to query actions in the past used to be up to the specific backend module what to do with them (e.g., RDBMS would fail, but memory would silently ignore). Now, before we get into the backend module, we will validate field names in criteria and order by elements of the filter. This feels like the right thing to always do, and good to be standardized - but it is a (breaking) change in behavior.
…ware-api module. Includes: - applying table personalization throughout api implementation class (e.g., for application-api calls made by users) - applying table personalization to api-aware middleware executors for count, query, and tableMeta actions (the only table-based ones that exist at this point) - for application-api-version-aware calls made by qqq frontends. - this involved refactoring GetTableApiFieldsAction's static (caching) wrapper methods to take GetTableApiFieldsInput, which now has an InputSource field - expected to be used personalization implementations (e.g., to only personalize USER-sourced actions).
…hroughout actions called by middleware-javalin, in general, by setting USER inputSource on actions that didn't have it.
…robably should have been used all along. It looks like it was previously only used for processes - now it will correctly be used for tables, apps, widgets, reports - all the things.
…stance's available permissions. This involves adding 3 new default methods in CustomPermissionChecker: handlesBuildAvailablePermission, buildAvailablePermission, and buildBaseAvailablePermission
…Checker interface: UseOtherPermissionNameCustomPermissionChecker and UseTablePermissionCustomPermissionChecker
…able personalization, to not show fields to a user who isn't allowed to see them.
…nd BulkLoad processes
…from feature/improve-bulk-edit-dependencies)
…unknown fields and to re-set table object in QueryInput after table meta data is modified.
…ends re: unrecognized field names (pursuant to table personalization), make FilesystemImporter process expose a field that specifies if unstructured values should remain in record, or only be stashed in values json blob.
|
🔒 Security Scan Complete Dependency vulnerability scan completed for this PR. View full report |
… field name handling) to AggregateAction This included refactoring getUnrecognizedFieldNames into its own reusable method in QueryAction, and marking AggregateInput as implementing QueryOrCountInputInterface
…eActionInput to return this type
…empty recordSecurityValue
…sorting, in case a PossibleValue has null label.
… an associated ScriptRevisionFile
|
🔒 Security Scan Complete Dependency vulnerability scan completed for this PR. View full report |
|
🔒 Security Scan Complete Dependency vulnerability scan completed for this PR. View full report |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
📝 Description
What does this PR do?
This PR adds a new concept of "Table Meta Data Personalization" to QQQ.
The concept here is, that an application can provide a code reference on the QInstance, which implements a new
TableMetaDataPersonalizerInterface, and all "user-facing" actions executed in the application are then subject to using a cloned QTableMetaData object, which has gone through a level of personalization (customization) specific for the user/session of the request. An implementation is being developed along with this framework capability inqbit-customizable-table-views.The business goal of this is so that an application's various user roles can be given different views of tables, e.g., "show all fields to admins", "hide some fields from end-users", "make users in Role X be required to put a value in field Foo", "don't allow users in Role Y to edit values in field Bar", and/or, "don't show a given Widget to users in some role".
The goal of the implementation is to remove fields entirely from users - so that they may not insert, update, or query/get values from fields that aren't in their personalized version of a table - and supporting actions (such as column stats, child record list widgets, audits, etc) all respect this personalization as well, in theory, to completely block fields from users who aren't allowed access to them. Yet - at the same time - if a user with a personalized view of a table, for example, runs a process, and that process works with a table (say to insert records with values that the user themselves can't see), the process should still have access to all field. Generally this is expected to be handled within the implementation of TableMetaDataPersonalizerInterface, where personalization would only be applied if
inputSource.equals(QInputSource.USER)- but this is not enforced by QQQ.Secondary changes
Related Issue:
Closes #[issue_number]
🔍 Type of Change
🧪 Testing
How has this been tested?
Test Commands:
📋 Checklist
Before submitting this PR, please ensure:
🔗 Related Resources
Documentation:
📊 Additional Information
Any additional information that reviewers should know:
Thank you for contributing to QQQ! 🚀