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

What is the difference between unit.TypeXXXX.UnitGlobalDisabled() and .Permission.CanRead #23003

Closed
yp05327 opened this issue Feb 20, 2023 · 1 comment
Labels
type/feature Completely new functionality. Can only be merged if feature freeze is not active. type/proposal The new feature has not been accepted yet but needs to be discussed first.

Comments

@yp05327
Copy link
Contributor

yp05327 commented Feb 20, 2023

Feature Description

When I was reviewing the changes in my PR #22705,
I found something strange: why UnitPackagesGlobalDisabled here?
https://github.com/go-gitea/gitea/pull/22705/files#diff-8020089c79cc846f287e738cf57917d21ec16499df1d994e6c31309d06a1a5afL28

Then I searched UnitPackagesGlobalDisabled, it is not existed.
So what about UnitProjectsGlobalDisabled?
I found it in here.

ctx.Data["UnitProjectsGlobalDisabled"] = unit.TypeProjects.UnitGlobalDisabled()

The next question is why we didn't define UnitPackagesGlobalDisabled here. If it is not defined, how do we controll this unit's visibility in repo's header?
Then I checked the codes in repo's header:

{{if .Permission.CanRead $.UnitTypeCode}}
<a class="{{if .PageIsViewCode}}active {{end}}item" href="{{.RepoLink}}{{if (ne .BranchName .Repository.DefaultBranch)}}/src/{{.BranchNameSubURL}}{{end}}">
{{svg "octicon-code"}} {{.locale.Tr "repo.code"}}
</a>
{{end}}
{{if .Permission.CanRead $.UnitTypeIssues}}
<a class="{{if .PageIsIssueList}}active {{end}}item" href="{{.RepoLink}}/issues">
{{svg "octicon-issue-opened"}} {{.locale.Tr "repo.issues"}}
{{if .Repository.NumOpenIssues}}
<span class="ui small label">{{CountFmt .Repository.NumOpenIssues}}</span>
{{end}}
</a>
{{end}}
{{if .Permission.CanRead $.UnitTypeExternalTracker}}
<a class="{{if .PageIsIssueList}}active {{end}}item" href="{{.RepoExternalIssuesLink}}" target="_blank" rel="noopener noreferrer">
{{svg "octicon-link-external"}} {{.locale.Tr "repo.issues"}} </span>
</a>
{{end}}
{{if and .Repository.CanEnablePulls (.Permission.CanRead $.UnitTypePullRequests)}}
<a class="{{if .PageIsPullList}}active {{end}}item" href="{{.RepoLink}}/pulls">
{{svg "octicon-git-pull-request"}} {{.locale.Tr "repo.pulls"}}
{{if .Repository.NumOpenPulls}}
<span class="ui small label">{{CountFmt .Repository.NumOpenPulls}}</span>
{{end}}
</a>
{{end}}
{{if and .EnableActions (not .UnitActionsGlobalDisabled) (.Permission.CanRead $.UnitTypeActions)}}
<a class="{{if .PageIsActions}}active {{end}}item" href="{{.RepoLink}}/actions">
{{svg "octicon-play"}} {{.locale.Tr "actions.actions"}}
{{if .Repository.NumOpenActionRuns}}
<span class="ui small label">{{CountFmt .Repository.NumOpenActionRuns}}</span>
{{end}}
</a>
{{end}}
{{if .Permission.CanRead $.UnitTypePackages}}
<a href="{{.RepoLink}}/packages" class="{{if .IsPackagesPage}}active {{end}}item">
{{svg "octicon-package"}} {{.locale.Tr "packages.title"}}
</a>
{{end}}
{{if and (not .UnitProjectsGlobalDisabled) (.Permission.CanRead $.UnitTypeProjects)}}
<a href="{{.RepoLink}}/projects" class="{{if .IsProjectsPage}}active {{end}}item">
{{svg "octicon-project"}} {{.locale.Tr "repo.project_board"}}
{{if .Repository.NumOpenProjects}}
<span class="ui small label">{{CountFmt .Repository.NumOpenProjects}}</span>
{{end}}
</a>
{{end}}
{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo)}}
<a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">
{{svg "octicon-tag"}} {{.locale.Tr "repo.releases"}}
{{if .NumReleases}}
<span class="ui small label">{{CountFmt .NumReleases}}</span>
{{end}}
</a>
{{end}}
{{if or (.Permission.CanRead $.UnitTypeWiki) (.Permission.CanRead $.UnitTypeExternalWiki)}}
<a class="{{if .PageIsWiki}}active {{end}}item" href="{{.RepoLink}}/wiki" {{if and (.Permission.CanRead $.UnitTypeExternalWiki) (not (HasPrefix ((.Repository.MustGetUnit $.Context $.UnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL) (.Repository.Link)))}} target="_blank" rel="noopener noreferrer" {{end}}>
{{svg "octicon-book"}} {{.locale.Tr "repo.wiki"}}
</a>
{{end}}
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}}
<a class="{{if .PageIsActivity}}active {{end}}item" href="{{.RepoLink}}/activity">
{{svg "octicon-pulse"}} {{.locale.Tr "repo.activity"}}
</a>
{{end}}

Almost of them use .Permission.CanRead to check the visibility, but some of them also use UnitXXXXXXGlobalDisabled. The definition is:
ctx.Data["UnitProjectsGlobalDisabled"] = unit.TypeProjects.UnitGlobalDisabled()


And at someplaces, I found we also use settings.UnitName.Enabled
e.g.

ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled

It seems that UnitXXXXXXGlobalDisabled and the permission model is used for repo units,
and we have no permission model for user/org level packages/projects, so settings are used directly here.


Then the next question is what is the difference between them?
Im not familiar with go, and I don't understand how the permission model works now.
Maybe I asked a stupid question, but I want to make sure my PR's codes are correct.


Then I changed the app.ini, to disable Packages, it worked. It seems that .Permission.CanRead is correct.
Then I found DEFAULT_REPO_UNITS and DISABLED_REPO_UNITS in the document. It seems that we can control the repo unit by this setting option. I think maybe UnitXXXXXXGlobalDisabled is related to it?

Then I disabled Package and Projects, restart the server, but it didn't work, I can still access them.
Then I searched DISABLED_REPO_UNITS, and no record in any go files.
So I created this issue #23001

I made a mistake in setting the vaule of DISABLED_REPO_UNITS, but no warning or error info. Maybe we can add it. -> #23024


Screenshots

No response

@yp05327 yp05327 added type/feature Completely new functionality. Can only be merged if feature freeze is not active. type/proposal The new feature has not been accepted yet but needs to be discussed first. labels Feb 20, 2023
@yp05327
Copy link
Contributor Author

yp05327 commented Feb 21, 2023

unit.TypeProjects.UnitGlobalDisabled() checks whether repo.projects is listed in DISABLED_REPO_UNITS
I removed UnitProjectsGlobalDisabled here, and it also worked with only .Permission.CanRead

{{if and (not .UnitProjectsGlobalDisabled) (.Permission.CanRead $.UnitTypeProjects)}}

It seems that UnitXXXXXXDisabled (unit.TypeXXXXXX.UnitGlobalDisabled()) is not necessary, since we can use .Permission.CanRead.

@yp05327 yp05327 closed this as completed Mar 24, 2023
@go-gitea go-gitea locked and limited conversation to collaborators May 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type/feature Completely new functionality. Can only be merged if feature freeze is not active. type/proposal The new feature has not been accepted yet but needs to be discussed first.
Projects
None yet
Development

No branches or pull requests

1 participant