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

Add RBAC schema implementation #9829

Merged
merged 7 commits into from
Feb 24, 2025

Conversation

wweellddeerr
Copy link
Contributor

@wweellddeerr wweellddeerr commented Feb 21, 2025

What does this PR change?

It is a port of #9802 containing the schema migration and the ORM implementation.

GUI diff

No difference.

  • DONE

Documentation

  • No documentation needed: only internal and user invisible changes

  • DONE

Test coverage

ℹ️ If a major new functionality is added, it is strongly recommended that tests for the new functionality are added to the Cucumber test suite

  • DONE

Links

https://github.com/SUSE/spacewalk/issues/26409

  • DONE

Changelogs

Make sure the changelogs entries you are adding are compliant with https://github.com/uyuni-project/uyuni/wiki/Contributing#changelogs and https://github.com/uyuni-project/uyuni/wiki/Contributing#uyuni-projectuyuni-repository

If you don't need a changelog check, please mark this checkbox:

  • No changelog needed

If you uncheck the checkbox after the PR is created, you will need to re-run changelog_test (see below)

Re-run a test

If you need to re-run a test, please mark the related checkbox, it will be unchecked automatically once it has re-run:

  • Re-run test "changelog_test"
  • Re-run test "backend_unittests_pgsql"
  • Re-run test "java_pgsql_tests"
  • Re-run test "schema_migration_test_pgsql"
  • Re-run test "susemanager_unittests"
  • Re-run test "javascript_lint"
  • Re-run test "spacecmd_unittests"

Before you merge

Check How to branch and merge properly!

@wweellddeerr wweellddeerr requested a review from a team as a code owner February 21, 2025 22:53
@wweellddeerr wweellddeerr requested review from rjmateus and removed request for a team February 21, 2025 22:53
Copy link
Contributor

👋 Hello! Thanks for contributing to our project.
Acceptance tests will take some time (aprox. 1h), please be patient ☕

You can see the progress at the end of this page and at https://github.com/uyuni-project/uyuni/pull/9829/checks
Once tests finish, if they fail, you can check 👀 the cucumber report. See the link at the output of the action.
You can also check the artifacts section, which contains the logs at https://github.com/uyuni-project/uyuni/pull/9829/checks.

If you are unsure the failing tests are related to your code, you can check the "reference jobs". These are jobs that run on a scheduled time with code from master. If they fail for the same reason as your build, it means the tests or the infrastructure are broken. If they do not fail, but yours do, it means it is related to your code.

Reference tests:

KNOWN ISSUES

Sometimes the build can fail when pulling new jar files from download.opensuse.org . This is a known limitation. Given this happens rarely, when it does, all you need to do is rerun the test. Sorry for the inconvenience.

For more tips on troubleshooting, see the troubleshooting guide.

Happy hacking!
⚠️ You should not merge if acceptance tests fail to pass. ⚠️

Copy link
Member

@rjmateus rjmateus left a comment

Choose a reason for hiding this comment

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

Just a few notes, but overall looks good.

-- userAccessTable view
-- User access rules on endpoints either permitted directly or through an access group
CREATE VIEW access.userAccessTable AS
WITH endpoints AS (
Copy link
Member

Choose a reason for hiding this comment

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

I'm not sure if we need this initial query. We should test it in terms of performance when we have all the endpoints and see if it has any performance impact.

Copy link
Contributor

Choose a reason for hiding this comment

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

This one used to be for my own convenience, but I changed this view completely with the latest commit. This view is now queried from the Java filters and is an integral part of the feature, so its performance is critical and I optimized it with proper indexes and planning.

So far I tested it with what data I have, and it's running in microseconds (with about half of the predicted endpoint data).

http_method VARCHAR NOT NULL,
scope CHAR(1) NOT NULL
CHECK (scope in ('A', 'W')),
authorized BOOLEAN NOT NULL DEFAULT true,
Copy link
Member

Choose a reason for hiding this comment

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

I would make it with a more explicit name, like auth_required, as proposed in the RFC.

Checkstyle fixes
rjmateus
rjmateus previously approved these changes Feb 24, 2025
Copy link
Member

@rjmateus rjmateus left a comment

Choose a reason for hiding this comment

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

Some small nitpick, overall looks good to me.

)
@NamedNativeQuery(name = "WebEndpoint_get_unauthenticated_webui",
// Get unauthenticated Web UI endpoints
query = "SELECT endpoint FROM access.endpoint WHERE auth_required = false"
Copy link
Member

Choose a reason for hiding this comment

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

The next query is filtering by API, this one is only filtering by auth_required false. Do we need the two methods? Is this needed because the default handler for the XML-RPC API?

Copy link
Contributor

Choose a reason for hiding this comment

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

This one is actually used with HTTP API routes as well (works the same way as a web UI endpoint). I'll fix the naming to reflect that.

}

/**
* Get all unauthorized web UI endpoints
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* Get all unauthorized web UI endpoints
* Get all web UI endpoints that don't require authorization check

Copy link
Contributor

Choose a reason for hiding this comment

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

I had a long argument with ChatGPT about this 🤣

Apparently, "unauthorized" means both "not authorized" and "doesn't require authorization"

But since you are also confused, I think it's better to change it like this

Copy link
Member

Choose a reason for hiding this comment

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

I not a native speaker, and even in my main language I not really good with "wording" so I would not argue on this regard :)

}

/**
* Get all unauthorized API methods
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* Get all unauthorized API methods
* Get all API methods that don't require authorization check


/**
* Get all unauthorized API methods
* @return the set of unauthorized API methods as a string of qualified class name & method
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* @return the set of unauthorized API methods as a string of qualified class name & method
* @return the set of API methods, that doesn't need authentication, as a string of qualified class name & method


/**
* Get all unauthorized web UI endpoints
* @return the set of unauthorized web endpoints
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* @return the set of unauthorized web endpoints
* @return the set of web endpoints that doesn't need authorization check

Address review issues
Fix schema idempotency issue
@cbbayburt cbbayburt merged commit 6540ae8 into uyuni-project:master Feb 24, 2025
27 of 30 checks passed
@cbbayburt cbbayburt mentioned this pull request Feb 25, 2025
12 tasks
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.

3 participants