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

UI: Add capabilities service #28168

Merged
merged 13 commits into from
Aug 23, 2024
Merged

UI: Add capabilities service #28168

merged 13 commits into from
Aug 23, 2024

Conversation

hellobontempo
Copy link
Contributor

@hellobontempo hellobontempo commented Aug 22, 2024

Description

Since we're moving away from checking capabilities in the ember data model, this adds a new capabilities service so permissions checks can happen more readily anywhere in the codebase.

✅ enterprise test
Screenshot 2024-08-23 at 4 17 46 PM

sample implementation

export default class MyClass extends Component {
  @service capabilities;
  
  backend = 'my-engine';
  permissions 

  // template helper
  canRead = (path) => this.capabilities.canRead(`${this.backend}/data/${path}`)
}
{{#if (await (this.canRead "my-secret"))}}
  <SecretComponent  />
{{/if}}

TODO only if you're a HashiCorp employee

  • Backport Labels: If this PR is in the ENT repo and needs to be backported, backport
    to N, N-1, and N-2, using the backport/ent/x.x.x+ent labels. If this PR is in the CE repo, you should only backport to N, using the backport/x.x.x label, not the enterprise labels.
    • If this fixes a critical security vulnerability or severity 1 bug, it will also need to be backported to the current LTS versions of Vault. To ensure this, use all available enterprise labels.
  • ENT Breakage: If this PR either 1) removes a public function OR 2) changes the signature
    of a public function, even if that change is in a CE file, double check that
    applying the patch for this PR to the ENT repo and running tests doesn't
    break any tests. Sometimes ENT only tests rely on public functions in CE
    files.
  • Jira: If this change has an associated Jira, it's referenced either
    in the PR description, commit message, or branch name.
  • RFC: If this change has an associated RFC, please link it in the description.
  • ENT PR: If this change has an associated ENT PR, please link it in the
    description. Also, make sure the changelog is in this PR, not in your ENT PR.

@hellobontempo hellobontempo requested a review from a team as a code owner August 22, 2024 21:31
@hellobontempo hellobontempo added this to the 1.18.0-rc milestone Aug 22, 2024
@github-actions github-actions bot added the hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed label Aug 22, 2024
Copy link

github-actions bot commented Aug 22, 2024

CI Results:
All Go tests succeeded! ✅

Copy link

github-actions bot commented Aug 22, 2024

Build Results:
All builds succeeded! ✅

@hellobontempo hellobontempo changed the title UI/add capabilities service UI: Add capabilities service Aug 22, 2024

import type StoreService from 'vault/services/store';

export default class CapabilitiesService extends Service {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

could also call this @permissions if we're worried about confusing it with the @lazyCapabilities method

Copy link
Contributor Author

@hellobontempo hellobontempo Aug 22, 2024

Choose a reason for hiding this comment

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

move this to addon so in templates we can do things like

{{#if (await (this.capabilities.canRead "secret/data/my-secret"))}}
   Show something...
{{/if}}

Copy link
Contributor

@hashishaw hashishaw left a comment

Choose a reason for hiding this comment

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

Good idea! Would love some sort of README about this, if nothing else than to establish that this is the newest pattern and we're moving away from capabilities on models.

A couple other improvements we could make here are caching (so we don't re-fetch the API for paths we already have) and passing multiple paths in the same capabilities call. This would be an especially useful improvement in places like KV, where there are multiple paths to check for the backend.

ui/app/services/capabilities.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@hashishaw hashishaw left a comment

Choose a reason for hiding this comment

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

preliminary comments!

ui/app/adapters/capabilities.js Show resolved Hide resolved
ui/app/services/capabilities.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@hashishaw hashishaw left a comment

Choose a reason for hiding this comment

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

Very nice! 🚀

@hellobontempo hellobontempo merged commit 09c92b8 into main Aug 23, 2024
31 checks passed
@hellobontempo hellobontempo deleted the ui/add-capabilities-service branch August 23, 2024 23:17
hashishaw added a commit that referenced this pull request Sep 12, 2024
hashishaw added a commit that referenced this pull request Sep 13, 2024
hashishaw added a commit that referenced this pull request Sep 20, 2024
…e/1.17.x (#28375)

* backport of commit 49b46ea

* add capabilities service (from #28168)

* fix failing ent test

---------

Co-authored-by: claire bontempo <[email protected]>
Co-authored-by: Chelsea Shaw <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed pr/no-changelog ui
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants