diff --git a/cmd/web.go b/cmd/web.go index fa3383764..9ed63289c 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -362,8 +362,14 @@ func runWeb(ctx *cli.Context) error { // ***** START: Organization ***** m.Group("/org", func() { - m.Get("/create", org.Create) - m.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.CreatePost) + m.Group("", func() { + m.Get("/create", org.Create) + m.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.CreatePost) + }, func(ctx *context.Context) { + if !ctx.User.CanCreateOrganization() { + ctx.NotFound() + } + }) m.Group("/:org", func() { m.Get("/dashboard", user.Dashboard) diff --git a/conf/app.ini b/conf/app.ini index 6e4e7a08e..27773a8a0 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -171,6 +171,8 @@ SSL_MODE = disable PATH = data/gogs.db [admin] +; Disable regular (non-admin) users to create organizations +DISABLE_REGULAR_ORG_CREATION = false [security] INSTALL_LOCK = false diff --git a/gogs.go b/gogs.go index 5ca4b68c0..0c5b344f7 100644 --- a/gogs.go +++ b/gogs.go @@ -16,7 +16,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.9.139.0210" +const APP_VER = "0.9.140.0210" func init() { setting.AppVer = APP_VER diff --git a/models/user.go b/models/user.go index 4b44a5137..6a7365ab7 100644 --- a/models/user.go +++ b/models/user.go @@ -170,6 +170,10 @@ func (u *User) CanCreateRepo() bool { return u.NumRepos < u.MaxRepoCreation } +func (u *User) CanCreateOrganization() bool { + return !setting.Admin.DisableRegularOrgCreation || u.IsAdmin +} + // CanEditGitHook returns true if user can edit Git hooks. func (u *User) CanEditGitHook() bool { return u.IsAdmin || u.AllowGitHook diff --git a/modules/setting/setting.go b/modules/setting/setting.go index ac4a893b6..8f6885c11 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -170,6 +170,11 @@ var ( FileExtensions []string } + // Admin settings + Admin struct { + DisableRegularOrgCreation bool + } + // Picture settings AvatarUploadPath string GravatarSource string @@ -568,6 +573,8 @@ func NewContext() { log.Fatal(4, "Fail to map UI settings: %v", err) } else if err = Cfg.Section("markdown").MapTo(&Markdown); err != nil { log.Fatal(4, "Fail to map Markdown settings: %v", err) + } else if err = Cfg.Section("admin").MapTo(&Admin); err != nil { + log.Fatal(4, "Fail to map Admin settings: %v", err) } else if err = Cfg.Section("cron").MapTo(&Cron); err != nil { log.Fatal(4, "Fail to map Cron settings: %v", err) } else if err = Cfg.Section("git").MapTo(&Git); err != nil { diff --git a/templates/.VERSION b/templates/.VERSION index 694d35dd9..48bfda0f1 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.9.139.0210 \ No newline at end of file +0.9.140.0210 \ No newline at end of file diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl index ae54e1e73..50a8283f1 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -93,9 +93,11 @@ {{.i18n.Tr "new_migrate"}} + {{if .SignedUser.CanCreateOrganization}} {{.i18n.Tr "new_org"}} + {{end}}