Commit 22279bc55870435c61d5e8208cc3117ef2268052
1 parent
3e115faa
Exists in
master
and in
4 other branches
Add settings for user permission defaults
“Can create groups” and “Can create teams” had hardcoded defaults to `true`. Sometimes it is desirable to prohibit these for newly created users by default.
Showing
9 changed files
with
62 additions
and
7 deletions
Show diff stats
app/controllers/admin/users_controller.rb
| @@ -29,7 +29,7 @@ class Admin::UsersController < Admin::ApplicationController | @@ -29,7 +29,7 @@ class Admin::UsersController < Admin::ApplicationController | ||
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | def new | 31 | def new |
| 32 | - @admin_user = User.new({ projects_limit: Gitlab.config.gitlab.default_projects_limit }, as: :admin) | 32 | + @admin_user = User.new.with_defaults |
| 33 | end | 33 | end |
| 34 | 34 | ||
| 35 | def edit | 35 | def edit |
app/controllers/registrations_controller.rb
| @@ -16,8 +16,7 @@ class RegistrationsController < Devise::RegistrationsController | @@ -16,8 +16,7 @@ class RegistrationsController < Devise::RegistrationsController | ||
| 16 | 16 | ||
| 17 | def build_resource(hash=nil) | 17 | def build_resource(hash=nil) |
| 18 | super | 18 | super |
| 19 | - self.resource.projects_limit = Gitlab.config.gitlab.default_projects_limit | ||
| 20 | - self.resource | 19 | + self.resource.with_defaults |
| 21 | end | 20 | end |
| 22 | 21 | ||
| 23 | private | 22 | private |
app/models/user.rb
| @@ -196,6 +196,14 @@ class User < ActiveRecord::Base | @@ -196,6 +196,14 @@ class User < ActiveRecord::Base | ||
| 196 | username | 196 | username |
| 197 | end | 197 | end |
| 198 | 198 | ||
| 199 | + def with_defaults | ||
| 200 | + tap do |u| | ||
| 201 | + u.projects_limit = Gitlab.config.gitlab.default_projects_limit | ||
| 202 | + u.can_create_group = Gitlab.config.gitlab.default_can_create_group | ||
| 203 | + u.can_create_team = Gitlab.config.gitlab.default_can_create_team | ||
| 204 | + end | ||
| 205 | + end | ||
| 206 | + | ||
| 199 | def notification | 207 | def notification |
| 200 | @notification ||= Notification.new(self) | 208 | @notification ||= Notification.new(self) |
| 201 | end | 209 | end |
config/gitlab.yml.example
| @@ -34,7 +34,9 @@ production: &base | @@ -34,7 +34,9 @@ production: &base | ||
| 34 | 34 | ||
| 35 | ## Project settings | 35 | ## Project settings |
| 36 | default_projects_limit: 10 | 36 | default_projects_limit: 10 |
| 37 | - # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled. | 37 | + # default_can_create_group: false # default: true |
| 38 | + # default_can_create_team: false # default: true | ||
| 39 | + # signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled. | ||
| 38 | # username_changing_enabled: false # default: true - User can change her username/namespace | 40 | # username_changing_enabled: false # default: true - User can change her username/namespace |
| 39 | 41 | ||
| 40 | ## Default project features settings | 42 | ## Default project features settings |
config/initializers/1_settings.rb
| @@ -48,7 +48,9 @@ Settings['issues_tracker'] ||= {} | @@ -48,7 +48,9 @@ Settings['issues_tracker'] ||= {} | ||
| 48 | # GitLab | 48 | # GitLab |
| 49 | # | 49 | # |
| 50 | Settings['gitlab'] ||= Settingslogic.new({}) | 50 | Settings['gitlab'] ||= Settingslogic.new({}) |
| 51 | -Settings.gitlab['default_projects_limit'] ||= 10 | 51 | +Settings.gitlab['default_projects_limit'] ||= 10 |
| 52 | +Settings.gitlab['default_can_create_group'] = true if Settings.gitlab['default_can_create_group'].nil? | ||
| 53 | +Settings.gitlab['default_can_create_team'] = true if Settings.gitlab['default_can_create_team'].nil? | ||
| 52 | Settings.gitlab['host'] ||= 'localhost' | 54 | Settings.gitlab['host'] ||= 'localhost' |
| 53 | Settings.gitlab['https'] = false if Settings.gitlab['https'].nil? | 55 | Settings.gitlab['https'] = false if Settings.gitlab['https'].nil? |
| 54 | Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80 | 56 | Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80 |
| @@ -111,3 +113,12 @@ Settings.satellites['path'] = File.expand_path(Settings.satellites['path'] || "t | @@ -111,3 +113,12 @@ Settings.satellites['path'] = File.expand_path(Settings.satellites['path'] || "t | ||
| 111 | # Extra customization | 113 | # Extra customization |
| 112 | # | 114 | # |
| 113 | Settings['extra'] ||= Settingslogic.new({}) | 115 | Settings['extra'] ||= Settingslogic.new({}) |
| 116 | + | ||
| 117 | +# | ||
| 118 | +# Testing settings | ||
| 119 | +# | ||
| 120 | +if Rails.env.test? | ||
| 121 | + Settings.gitlab['default_projects_limit'] = 42 | ||
| 122 | + Settings.gitlab['default_can_create_group'] = false | ||
| 123 | + Settings.gitlab['default_can_create_team'] = false | ||
| 124 | +end |
lib/gitlab/auth.rb
| @@ -39,8 +39,7 @@ module Gitlab | @@ -39,8 +39,7 @@ module Gitlab | ||
| 39 | email: email, | 39 | email: email, |
| 40 | password: password, | 40 | password: password, |
| 41 | password_confirmation: password, | 41 | password_confirmation: password, |
| 42 | - projects_limit: Gitlab.config.gitlab.default_projects_limit, | ||
| 43 | - }, as: :admin) | 42 | + }, as: :admin).with_defaults |
| 44 | @user.save! | 43 | @user.save! |
| 45 | 44 | ||
| 46 | if Gitlab.config.omniauth['block_auto_created_users'] && !ldap | 45 | if Gitlab.config.omniauth['block_auto_created_users'] && !ldap |
spec/features/admin/admin_users_spec.rb
| @@ -33,6 +33,14 @@ describe "Admin::Users" do | @@ -33,6 +33,14 @@ describe "Admin::Users" do | ||
| 33 | expect { click_button "Create user" }.to change {User.count}.by(1) | 33 | expect { click_button "Create user" }.to change {User.count}.by(1) |
| 34 | end | 34 | end |
| 35 | 35 | ||
| 36 | + it "should apply defaults to user" do | ||
| 37 | + click_button "Create user" | ||
| 38 | + user = User.last | ||
| 39 | + user.projects_limit.should == Gitlab.config.gitlab.default_projects_limit | ||
| 40 | + user.can_create_group.should == Gitlab.config.gitlab.default_can_create_group | ||
| 41 | + user.can_create_team.should == Gitlab.config.gitlab.default_can_create_team | ||
| 42 | + end | ||
| 43 | + | ||
| 36 | it "should create user with valid data" do | 44 | it "should create user with valid data" do |
| 37 | click_button "Create user" | 45 | click_button "Create user" |
| 38 | user = User.last | 46 | user = User.last |
spec/lib/auth_spec.rb
| @@ -91,5 +91,15 @@ describe Gitlab::Auth do | @@ -91,5 +91,15 @@ describe Gitlab::Auth do | ||
| 91 | user.extern_uid.should == @info.uid | 91 | user.extern_uid.should == @info.uid |
| 92 | user.provider.should == 'twitter' | 92 | user.provider.should == 'twitter' |
| 93 | end | 93 | end |
| 94 | + | ||
| 95 | + it "should apply defaults to user" do | ||
| 96 | + @auth = mock(info: @info, provider: 'ldap') | ||
| 97 | + user = gl_auth.create_from_omniauth(@auth, true) | ||
| 98 | + | ||
| 99 | + user.should be_valid | ||
| 100 | + user.projects_limit.should == Gitlab.config.gitlab.default_projects_limit | ||
| 101 | + user.can_create_group.should == Gitlab.config.gitlab.default_can_create_group | ||
| 102 | + user.can_create_team.should == Gitlab.config.gitlab.default_can_create_team | ||
| 103 | + end | ||
| 94 | end | 104 | end |
| 95 | end | 105 | end |
spec/models/user_spec.rb
| @@ -178,4 +178,22 @@ describe User do | @@ -178,4 +178,22 @@ describe User do | ||
| 178 | it { user.can_create_project?.should be_true } | 178 | it { user.can_create_project?.should be_true } |
| 179 | it { user.first_name.should == 'John' } | 179 | it { user.first_name.should == 'John' } |
| 180 | end | 180 | end |
| 181 | + | ||
| 182 | + describe 'without defaults' do | ||
| 183 | + let(:user) { User.new } | ||
| 184 | + it "should not apply defaults to user" do | ||
| 185 | + user.projects_limit.should == 10 | ||
| 186 | + user.can_create_group.should == true | ||
| 187 | + user.can_create_team.should == true | ||
| 188 | + end | ||
| 189 | + end | ||
| 190 | + | ||
| 191 | + describe 'with defaults' do | ||
| 192 | + let(:user) { User.new.with_defaults } | ||
| 193 | + it "should apply defaults to user" do | ||
| 194 | + user.projects_limit.should == 42 | ||
| 195 | + user.can_create_group.should == false | ||
| 196 | + user.can_create_team.should == false | ||
| 197 | + end | ||
| 198 | + end | ||
| 181 | end | 199 | end |