Normalize permission model#1207
Conversation
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
cf8ac6f to
23057e5
Compare
…erver into normalize-permission-model Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Coverage summary from CodacySee diff coverage on Codacy
Coverage variation details
Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: Diff coverage details
Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: See your quality gate settings Change summary preferences |
apiserver/src/main/java/org/dependencytrack/auth/Permissions.java
Outdated
Show resolved
Hide resolved
apiserver/src/main/java/org/dependencytrack/resources/v1/PermissionResource.java
Show resolved
Hide resolved
apiserver/src/main/java/org/dependencytrack/auth/Permissions.java
Outdated
Show resolved
Hide resolved
apiserver/src/main/java/org/dependencytrack/resources/v1/AbstractApiResource.java
Outdated
Show resolved
Hide resolved
apiserver/src/main/java/org/dependencytrack/auth/Permissions.java
Outdated
Show resolved
Hide resolved
| @@ -26,96 +26,78 @@ | |||
| */ | |||
| public enum Permissions { | |||
There was a problem hiding this comment.
Note so we don't forget:
- Before this can be merged, we need a DB migration that reassigns any existing old permissions to their corresponding new counterparts.
- Changes in frontend would also be required.
There was a problem hiding this comment.
@nscuro I added a change set for the migration. Not sure if it's what you were looking for, so any suggestions are welcome. Will work on the frontend tomorrow
…into normalize-permission-model
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
…to role Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
|
@nscuro I haven't pushed this, but initially thought about adding database-level enforcement using:
Either the addition of the changeSet <changeSet id="v5.6.0-32.3" author="jhoward-lm">
<sql splitStatements="true">
CREATE TYPE permission_scope AS ENUM (
'PROJECT',
'SYSTEM'
);
CREATE TYPE project_permission AS ENUM (
'BADGES_READ',
'BOM_READ',
'BOM_CREATE',
'FINDING_READ',
'FINDING_UPDATE',
'FINDING_CREATE',
'POLICY_VIOLATION_READ',
'POLICY_VIOLATION_UPDATE',
'POLICY_VIOLATION_CREATE',
'PROJECT_READ',
'PROJECT_UPDATE',
'PROJECT_DELETE'
);
CREATE TYPE system_permission AS ENUM (
'ACCESS_MANAGEMENT',
'NOTIFICATION_RULE',
'POLICY',
'PORTFOLIO_ACCESS_CONTROL_BYPASS',
'PORTFOLIO',
'SYSTEM_CONFIGURATION',
'TAG',
'VULNERABILITY'
);
CREATE CAST (VARCHAR AS project_permission) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS system_permission) WITH INOUT AS IMPLICIT;
CREATE DOMAIN permission AS TEXT NOT NULL
CHECK (
VALUE = ANY(CAST(enum_range(NULL::project_permission) AS TEXT[])) OR
VALUE = ANY(CAST(enum_range(NULL::system_permission) AS TEXT[]))
);
</sql>
<addColumn tableName="PERMISSION">
<column name="SCOPE" type="permission_scope" />
</addColumn>
<sql splitStatements="false">
UPDATE "PERMISSION" SET "SCOPE" = CASE
WHEN "NAME" = ANY(CAST(enum_range(NULL::project_permission) AS TEXT[])) THEN 'PROJECT'::permission_scope
WHEN "NAME" = ANY(CAST(enum_range(NULL::system_permission) AS TEXT[])) THEN 'SYSTEM'::permission_scope
ELSE "SCOPE"
END;
</sql>
<addNotNullConstraint tableName="PERMISSION" columnName="SCOPE" validate="true" />
<createView viewName="PERMISSIONS_SCOPED" replaceIfExists="true">
SELECT 'PROJECT'::permission_scope AS "TYPE", enum_val::TEXT AS "NAME"
FROM unnest(enum_range(NULL::project_permission)) AS enum_val
UNION
SELECT 'SYSTEM'::permission_scope AS "TYPE", enum_val::TEXT AS "NAME"
FROM unnest(enum_range(NULL::system_permission)) AS enum_val
</createView>
<modifyDataType tableName="PERMISSION" columnName="NAME" newDataType="permission" />
</changeSet>If a new permission needs to be added or renamed in the future, though, the contributor would need to know to add a change set containing something like <sql>
ALTER TYPE project_permission
ADD VALUE 'METRICS_READ'
AFTER 'FINDING_CREATE';
ALTER TYPE system_permission
RENAME VALUE 'PORTFOLIO'
TO 'PORTFOLIO_MANAGEMENT';
</sql> |
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: jhoward-lm <140011346+jhoward-lm@users.noreply.github.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
…erver into normalize-permission-model Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
test: - enable authorization for tests in NotificationRuleResourceTest Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
nscuro
left a comment
There was a problem hiding this comment.
Some initial feedback. I still need to have a close look at all the changed permission checks and verify they behave as expected.
I am also thinking to cut a release, even if it's just a release candidate, before merging this since it's rather intrusive.
apiserver/src/main/java/org/dependencytrack/resources/v1/MetricsResource.java
Show resolved
Hide resolved
...tence-migration/src/main/resources/migration/procedures/function_has-user-project-access.sql
Show resolved
Hide resolved
…erver into normalize-permission-model
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
…to normalize-permission-model-merge-fix
Signed-off-by: nscuro <nscuro@protonmail.com>
|
@jhoward-lm I raised jhoward-lm#16 to resolve the merge conflicts. |
…l-merge-fix Resolve merge conflicts
@nscuro Thanks! I merged it |
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
…erver into normalize-permission-model
Signed-off-by: Jonathan Howard <jonathan.w.howard@lmco.com>
Description
This PR is an implementation of the permission model normalization discussed in DependencyTrack/hyades#1757 and proposed by DependencyTrack/hyades#1783.
Addressed Issue
Closes DependencyTrack/hyades#1757
Additional Details
Checklist
This PR fixes a defect, and I have provided tests to verify that the fix is effective