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

feat: Implement scalable dialog search authorization #875

Merged
merged 20 commits into from
Sep 6, 2024

Conversation

elsand
Copy link
Member

@elsand elsand commented Jun 24, 2024

Description

This implements a authorized-parties based approach to list/search authorization, which should scale better than the current approach.

This builds on the syncronization of data from RR, which contains a map of subjects (role codes and eventually access packages) and resources. This data is persisted in Dialogporten DB, and used as a cache.

A new predicate builder PrefilterAuthorizedDialogs replacesWhereUserIsAuthorizedFor, and constructs a SQL manually in order to propertly handle the new property SubjectsByParties in DialogSearchAuthorizationResult, which is a dict of party->subjects. Each of the roles grant access to a list of resources.

This also removes legacy system users, as they cannot be authorized this way (not possible to get a list of parties from Authorization APIs for a legacy system user).

Related Issue(s)

Verification

  • Your code builds clean without any errors or warnings
  • Manual testing done (required)
  • Relevant automated test added (if you find this hard, leave it and we'll help out)

Documentation

  • Documentation is updated (either in docs-directory, Altinnpedia or a separate linked PR in altinn-studio-docs., if applicable)

Summary by CodeRabbit

  • New Features

    • Enhanced user identification handling and authorization checks.
    • Introduced new methods for filtering dialogs based on user authorizations.
    • Added functionality for generating fake data with customizable options.
  • Bug Fixes

    • Removed legacy support for outdated user types and improved logic for current user types.
  • Documentation

    • Updated configuration settings for local development environments to enhance clarity.
  • Chores

    • Streamlined code by removing obsolete methods and classes, improving maintainability.

@elsand elsand added the waiting Waiting for other tasks to complete or blocked by other factors label Aug 24, 2024
@elsand elsand changed the title Implement scable dialog search authorization feat: Implement scalable dialog search authorization Aug 24, 2024
elsand added a commit that referenced this pull request Sep 4, 2024
## Description

This is the precursor to #875, adding the SubjectResource (was
"RoleResource") entity and update mechanism that uses the new changefeed
API in RR

This adds a "Janitor" console project, which can be invoked in container
app jobs (or manually) to perform the syncronization.

## Related Issue(s)

- #42

## Verification

- [ ] **Your** code builds clean without any errors or warnings
- [ ] Manual testing done (required)
- [ ] Relevant automated test added (if you find this hard, leave it and
we'll help out)

## Documentation

- [ ] Documentation is updated (either in `docs`-directory, Altinnpedia
or a separate linked PR in
[altinn-studio-docs.](https://github.com/Altinn/altinn-studio-docs), if
applicable)

---------

Co-authored-by: Magnus Sandgren <[email protected]>
Co-authored-by: Are Almaas <[email protected]>
Co-authored-by: Ole Jørgen Skogstad <[email protected]>
@elsand elsand removed the waiting Waiting for other tasks to complete or blocked by other factors label Sep 5, 2024
@elsand elsand marked this pull request as ready for review September 5, 2024 08:03
@elsand elsand requested a review from a team as a code owner September 5, 2024 08:03
@Altinn Altinn deleted a comment from sonarqubecloud bot Sep 5, 2024
@MagnusSandgren MagnusSandgren self-requested a review September 5, 2024 09:48
Copy link
Collaborator

@MagnusSandgren MagnusSandgren left a comment

Choose a reason for hiding this comment

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

Holder fremdeles på å reviewe, men endringen på DialogUserTypes trenger litt mer kjærlighet.

MagnusSandgren
MagnusSandgren previously approved these changes Sep 6, 2024
Copy link
Collaborator

@MagnusSandgren MagnusSandgren left a comment

Choose a reason for hiding this comment

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

Approved - bare ta en titt her #1091 Gi meg beskjed om du trenger en ny approval 🙂

Nå ble dette litt mer enn noen forslag om akkurat PRen din. Jeg så noe
lavt hengende frukt i PaginatedList også som jeg håper du syns er greit
at jeg bare slenger inn her 🙏
Copy link

sonarqubecloud bot commented Sep 6, 2024

@elsand elsand merged commit aa8f84d into main Sep 6, 2024
20 checks passed
@elsand elsand deleted the feature/full-search-auth branch September 6, 2024 11:14
arealmaas pushed a commit that referenced this pull request Sep 10, 2024
🤖 I have created a release *beep* *boop*
---


##
[1.17.0](v1.16.0...v1.17.0)
(2024-09-10)


### Features

* Add SubjectResource entity and db migration
([#1048](#1048))
([d04d764](d04d764))
* **graphQL:** Add subscription for dialog details
([#1072](#1072))
([8214acb](8214acb))
* Implement scalable dialog search authorization
([#875](#875))
([aa8f84d](aa8f84d))
* revise dialog status
([#1099](#1099))
([0029f46](0029f46))


### Bug Fixes

* ensure correct appsettings is used
([#1086](#1086))
([d43f6d7](d43f6d7))
* ensure jobs are run with correct arguments and parameters
([#1085](#1085))
([e21de56](e21de56))
* **webapi:** Return 422 when existing transmission IDs are used in
dialog update
([#1094](#1094))
([7a8a933](7a8a933))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
@Altinn Altinn deleted a comment from coderabbitai bot Sep 16, 2024
@Altinn Altinn deleted a comment from coderabbitai bot Sep 16, 2024
@elsand
Copy link
Member Author

elsand commented Sep 16, 2024

@coderabbitai full review

Copy link
Contributor

coderabbitai bot commented Sep 16, 2024

Actions performed

Full review triggered.

Copy link
Contributor

coderabbitai bot commented Sep 16, 2024

Caution

Review failed

The pull request is closed.

Walkthrough

Walkthrough

Dis big change, it involves removin' old support for Altinn 2 enterprise users and addin' new methods for handlin' party identifiers. Many legacy methods gone, and new ones introduced to make user type handling better. Also, some classes got new methods for filterin' and authorization. Overall, it’s a big shift toward modern user management and authorization processes.

Changes

File Path Change Summary
src/.../ClaimsPrincipalExtensions.cs Removed legacy user methods; added new methods for party identifiers.
src/.../DbSetExtensions.cs Added PrefilterAuthorizedDialogs method for filtering dialogs based on authorization.
src/.../QueryableExtensions.cs Removed WhereUserIsAuthorizedFor method, simplifying authorization logic.
src/.../IUserParties.cs Updated GetUserParties to include a named argument for cancellationToken.
src/.../IUserRegistry.cs Refined user identification handling; simplified GetCurrentUserInformation method.
src/.../Pagination/PaginatedList.cs Added methods for transforming items and creating empty paginated lists.
src/.../AltinnAuthorization/AuthorizedPartiesResult.cs Changed AuthorizedParties property to mutable; added new properties for roles and parent party.
src/.../AltinnAuthorization/DialogSearchAuthorizationResult.cs Replaced PartiesByResources with SubjectsByParties, updating authorization checks.
src/.../AltinnAuthorization/IAltinnAuthorization.cs Modified GetAuthorizedParties method to include an optional flatten parameter.
src/.../Features/V1/EndUser/Dialogs/Queries/Search/SearchDialogQuery.cs Improved authorization checks and pagination handling in dialog search.
src/.../Domain/Dialogs/Entities/DialogUserType.cs Removed LegacySystemUser type and renumbered remaining user types.
src/.../Infrastructure/Altinn/Authorization/AltinnAuthorizationClient.cs Updated authorization requests and removed dependency on IDialogDbContext.
src/.../Infrastructure/Altinn/Authorization/DecisionRequestHelper.cs Removed NonScalable class, indicating a shift to a more robust solution.
src/.../Infrastructure/Persistence/DevelopmentSubjectResourceSyncHostedService.cs Added a hosted service for synchronizing subject resource mappings.
src/.../WebApi/Properties/launchSettings.json Added environment variables for logging configuration using Serilog.
src/.../GenerateFakeData/DialogGenerator.cs Enhanced fake data generation with optional generator functions.
src/.../Benchmarks/QueryableExtensionsBenchmark.cs Removed benchmark tests for the deleted WhereUserIsAuthorizedFor method.
tests/.../QueryableExtensionsTests.cs Deleted tests for the removed WhereUserIsAuthorizedFor method.

Possibly related PRs


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    -- I pushed a fix in commit <commit_id>, please review it.
    -- Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    -- @coderabbitai generate unit testing code for this file.
    -- @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    -- @coderabbitai generate interesting stats about this repository and render them as a table.
    -- @coderabbitai read src/utils.ts and generate unit testing code.
    -- @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    -- @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants