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}}