[email protected] wrote: > From: martyntaylor <[email protected]> > > --- > src/app/controllers/dashboard_controller.rb | 15 ++++-- > src/app/controllers/settings_controller.rb | 55 > +++++++++++++++++++- > src/app/controllers/users_controller.rb | 4 -- > src/app/services/registration_service.rb | 23 ++++---- > src/db/migrate/20090803141507_create_pools.rb | 5 ++ > .../20100707000000_create_metadata_objects.rb | 14 +++++ > src/features/authentication.feature | 19 ------- > src/features/support/hooks.rb | 18 ++++++- > src/spec/controllers/users_controller_spec.rb | 25 ++++++--- > src/spec/factories/metadata_object.rb | 14 ++++-- > src/spec/models/registration_service_spec.rb | 22 ++++++++ > 11 files changed, 161 insertions(+), 53 deletions(-) > > diff --git a/src/app/controllers/dashboard_controller.rb > b/src/app/controllers/dashboard_controller.rb > index 5a83efb..c5a842a 100644 > --- a/src/app/controllers/dashboard_controller.rb > +++ b/src/app/controllers/dashboard_controller.rb > @@ -67,11 +67,16 @@ class DashboardController < ApplicationController > # FIXME filter to just those that the user has access to > @cloud_accounts = CloudAccount.find(:all) > > - # FIXME remove general role based permission check, replace w/ > - # more granular / per-permission-object permission checks on the > - # dashboard in the future (here and in dashboard views) > - @is_admin = @current_user.permissions.collect { |p| p.role }. > - find { |r| r.name == "Administrator" } > + > + # Now need to check any permissions are set since default permission and > pool > + # may not be set for the admin user > + if @current_user.permissions > + # FIXME remove general role based permission check, replace w/ > + # more granular / per-permission-object permission checks on the > + # dashboard in the future (here and in dashboard views) > + @is_admin = @current_user.permissions.collect { |p| p.role }. > + find { |r| r.name == "Administrator" } > + end > > @hide_getting_started = true > #...@hide_getting_started = > cookies["#...@current_user.login}_hide_getting_started"] > diff --git a/src/app/controllers/settings_controller.rb > b/src/app/controllers/settings_controller.rb > index 32ef39f..21499e4 100644 > --- a/src/app/controllers/settings_controller.rb > +++ b/src/app/controllers/settings_controller.rb > @@ -22,13 +22,66 @@ > class SettingsController < ApplicationController > before_filter :require_user > > + # Settings MetaData Keys > + ALLOW_SELF_SERVICE_LOGINS = "allow_self_service_logins" > + SELF_SERVICE_DEFAULT_POOL = "self_service_default_pool" > + SELF_SERVICE_DEFAULT_ROLE = "self_service_default_role" > I think we can get rid of all three of the above. self-service login will be on a different page from this one (this page will appear as the "treatments" page), and the default pool/role will ultimately be set by adding a default user group, and this pool/role will be granted to the user group. > + SELF_SERVICE_DEFAULT_QUOTA = "self_service_default_quota" > + > + KEYS = [ALLOW_SELF_SERVICE_LOGINS, SELF_SERVICE_DEFAULT_POOL, > SELF_SERVICE_DEFAULT_ROLE, SELF_SERVICE_DEFAULT_QUOTA] > + > def index > + @is_admin = is_admin? > @providers = Provider.list_for_user(@current_user, > Privilege::PROVIDER_VIEW) > end > > def self_service > + if !is_admin? > + raise PermissionError.new('You have insufficient privileges to perform > action.') > + return > + end > + > + @pools = Pool.list_for_user(@current_user, Privilege::POOL_MODIFY) > + @self_service_default_pool = > MetadataObject.lookup(SELF_SERVICE_DEFAULT_POOL) > + @self_service_default_pool_id = @self_service_default_pool == nil ? nil > : @self_service_default_pool.id.to_i > + > + @roles = Role.all > + @self_service_default_role = > MetadataObject.lookup(SELF_SERVICE_DEFAULT_ROLE) > + @self_service_default_role_id = @self_service_default_role == nil ? nil > : @self_service_default_role.id.to_i > + > + @allow_self_service_logins = > MetadataObject.lookup(ALLOW_SELF_SERVICE_LOGINS) == "true" ? true : false > @providers = Provider.list_for_user(@current_user, > Privilege::PROVIDER_VIEW) > - @pools = Pool.list_for_user(@current_user, Privilege::POOL_VIEW) > + > Again I think we can dump pool/role/logins here. Jay is this consistent with your understanding of presenting this on the "treatment" page that only allows quota setting here? > + @self_service_default_quota = > MetadataObject.lookup(SELF_SERVICE_DEFAULT_QUOTA) > end > > + def update > + KEYS.each do |key| > + if params[key] > + if key == SELF_SERVICE_DEFAULT_QUOTA > + self_service_default_quota = MetadataObject.lookup(key) > + self_service_default_quota.update_attributes(params[key]) > We should track this as a plain value representing the value of the default quota, not an AR quota object > + elsif key == SELF_SERVICE_DEFAULT_POOL > + if Pool.exists?(params[key]) > + MetadataObject.set(key, Pool.find(params[key])) > + end > + elsif key == SELF_SERVICE_DEFAULT_ROLE > + if Role.exists?(params[key]) > + MetadataObject.set(key, Role.find(params[key])) > + end > + else > + MetadataObject.set(key, params[key]) > + end > + end > + end > + > + flash[:notice] = "Settings Updated!" > + redirect_to :action => 'self_service' > + end > + > + private > + def is_admin? > + is_admin = @current_user.permissions.collect { |p| p.role }.find { |r| > r.name == "Administrator" } > + return is_admin == nil ? false : true > + end > end > diff --git a/src/app/controllers/users_controller.rb > b/src/app/controllers/users_controller.rb > index 8488509..f61c6d2 100644 > --- a/src/app/controllers/users_controller.rb > +++ b/src/app/controllers/users_controller.rb > @@ -31,10 +31,6 @@ class UsersController < ApplicationController > require_privilege(Privilege::USER_MODIFY) unless current_user.nil? > @user = User.new(params[:user]) > > - #TODO Set Quota Values to SelfService Settings Default Quota > - @user_quota = Quota.new > - @user.quota_id = @user_quota.id > - > @registration = RegistrationService.new(@user) > if @registration.save > flash[:notice] = "User registered!" > diff --git a/src/app/services/registration_service.rb > b/src/app/services/registration_service.rb > index 140b92e..0baca83 100644 > --- a/src/app/services/registration_service.rb > +++ b/src/app/services/registration_service.rb > @@ -14,21 +14,22 @@ class RegistrationService > begin > User.transaction do > @user.save! > - @pool = Pool.create!({ :name => @user.login, :zone => Zone.default}) > > - @quota = Quota.new > - @quota.save! > + allow_self_service_logins = > MetadataObject.lookup("allow_self_service_logins") > + self_service_default_pool = > MetadataObject.lookup("self_service_default_pool") > + self_service_default_role = > MetadataObject.lookup("self_service_default_role") > + self_service_default_quota = > MetadataObject.lookup("self_service_default_quota") > > - @pool.quota_id = @quota.id > - @pool.save! > + @user_quota = Quota.new(:maximum_running_instances => > self_service_default_quota.maximum_running_instances, > + :maximum_total_instances => > self_service_default_quota.maximum_total_instances) > + @user_quota.save! > + @user.quota = @user_quota > We need a new quota object for each user, since the quota object also tracks usage. We should only be pulling the #instances number from the metadata bits rather than a quota object. > + @user.save! > > - raise "Role 'Instance Creator and User' doesn't exist" unless > - role = Role.find_by_name("Instance Creator and User") > + Permission.create!({:user => @user, :role => > self_service_default_role, :permission_object => self_service_default_pool}) > > - Permission.create!({:user => @user, > - :role => role, > - :permission_object => @pool}) > - end > + return true > + end > rescue > Rails.logger.error $!.message > Rails.logger.error $!.backtrace.join("\n ") > diff --git a/src/db/migrate/20090803141507_create_pools.rb > b/src/db/migrate/20090803141507_create_pools.rb > index e0c1dc7..58e3c3d 100644 > --- a/src/db/migrate/20090803141507_create_pools.rb > +++ b/src/db/migrate/20090803141507_create_pools.rb > @@ -30,6 +30,11 @@ class CreatePools < ActiveRecord::Migration > t.timestamps > end > > + quota = Quota.new > + quota.save! > + > > + default_pool = Pool.new(:name => "default_pool", :quota => quota, :zone > => Zone.first) > + default_pool.save! > end > > def self.down > diff --git a/src/db/migrate/20100707000000_create_metadata_objects.rb > b/src/db/migrate/20100707000000_create_metadata_objects.rb > index 2f3eeb5..5f00306 100644 > --- a/src/db/migrate/20100707000000_create_metadata_objects.rb > +++ b/src/db/migrate/20100707000000_create_metadata_objects.rb > @@ -31,6 +31,20 @@ class CreateMetadataObjects < ActiveRecord::Migration > > default_zone = Zone.first > MetadataObject.set("default_zone", default_zone) if default_zone > + > + default_pool = Pool.first > + > You should pull the pool by name here -- don't assume that there's only one pool define here. > + default_quota = Quota.new > + default_quota.save! > + > We don't need the default quota, since we just want to store an integer for the default (and we can leave this as 'nil'/unset for now since nil == unlimited) > + default_role = Role.find_by_name("Instance Creator and User") > + settings = {"allow_self_service_logins" => "true", > + "self_service_default_quota" => default_quota, > We can leave out default quota setting here > + "self_service_default_pool" => default_pool, > + "self_service_default_role" => default_role} > + settings.each_pair do |key, value| > + MetadataObject.set(key, value) > + end > end > > def self.down > diff --git a/src/features/authentication.feature > b/src/features/authentication.feature > index e160dfb..8525311 100644 > --- a/src/features/authentication.feature > +++ b/src/features/authentication.feature > @@ -19,25 +19,6 @@ Feature: User authentication > And I press "Create Account" > Then I should be on testuser's user page > And I should see "User registered!" > - And I should have one private pool named "testuser" > - > - @register > - Scenario: Register as new user fails even if user is valid > - Given I am on the homepage > - And there are not any roles > - When I follow "Create one now" > - Then I should be on the new account page > - And I should see "New Account" > - When I fill in the following: > - | Choose a username | testuser | > - | Choose a password | secret | > - | Confirm password | secret | > - | First name | Joe | > - | Last name | Tester | > - | Email | [email protected] | > - And I press "Create Account" > - Then I should see "New Account" > - And I should see "user registration failed" > > Scenario: Log in as registered user > Given I am a registered user > diff --git a/src/features/support/hooks.rb b/src/features/support/hooks.rb > index 356cf0d..49842fc 100644 > --- a/src/features/support/hooks.rb > +++ b/src/features/support/hooks.rb > @@ -1,3 +1,19 @@ > Before do > @default_zone_metadata = Factory.create(:default_zone_metadata) > -end > + @allow_self_service_logins = Factory(:metadata_object, :key => > "allow_self_service_logins", :value => "true") > + > + @default_quota = Factory(:unlimited_quota) > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_quota", > + :value => > @default_quota, > + :object_type => > "Quota") > + > + @default_pool = Factory(:pool, :name => "default_pool") > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_pool", > + :value => > @default_pool, > + :object_type => > "Pool") > + > + @default_role = Role.find(:first, :conditions => ['name = ?', 'Instance > Creator and User']) > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_role", > + :value => > @default_role, > + :object_type => > "Role") > +end > \ No newline at end of file > diff --git a/src/spec/controllers/users_controller_spec.rb > b/src/spec/controllers/users_controller_spec.rb > index 5add3c7..debc675 100644 > --- a/src/spec/controllers/users_controller_spec.rb > +++ b/src/spec/controllers/users_controller_spec.rb > @@ -7,6 +7,23 @@ describe UsersController do > @admin_permission = Factory :admin_permission > @admin = @admin_permission.user > activate_authlogic > + > + @allow_self_service_logins = Factory(:metadata_object, :key => > "allow_self_service_logins", :value => "true") > + > + @default_quota = Factory(:unlimited_quota) > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_quota", > + :value => > @default_quota, > + :object_type => > "Quota") > + > + @default_pool = Factory(:pool, :name => "default_pool") > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_pool", > + :value => > @default_pool, > + :object_type => > "Pool") > + > + @default_role = Role.find(:first, :conditions => ['name = ?', 'Instance > Creator and User']) > + @self_service_default_quota = Factory(:metadata_object, :key => > "self_service_default_role", > + :value => > @default_role, > + :object_type => > "Role") > end > > it "should call new method" do > @@ -29,14 +46,6 @@ describe UsersController do > :password => "testpass", > :password_confirmation => "testpass" } > }.should change{ User.count } > - p = Pool.find_by_name("tuser2") > - p.should_not be_nil > - > - p.name.should == "tuser2" > - p.permissions.size.should == 1 > - p.permissions.any? { > - |perm| perm.role.name.eql?('Instance Creator and User') > - }.should be_true > user = User.find(:first, :conditions => ['login = ?', "tuser2"]) > response.should redirect_to(user_url(user)) > end > diff --git a/src/spec/factories/metadata_object.rb > b/src/spec/factories/metadata_object.rb > index 04e8404..5dcf989 100644 > --- a/src/spec/factories/metadata_object.rb > +++ b/src/spec/factories/metadata_object.rb > @@ -1,5 +1,11 @@ > -Factory.define :default_zone_metadata, :class => MetadataObject do |o| > - o.key 'default_zone' > - o.value {Factory.create(:zone).id} > - o.object_type 'Zone' > +Factory.define :metadata_object do |o| > + o.key 'key' > + o.value 'value' > + o.object_type nil > end > + > +Factory.define :default_zone_metadata, :parent => :metadata_object do |o| > + o.key 'default_zone' > + o.value Factory.create(:zone).id > + o.object_type 'Zone' > +end > \ No newline at end of file > diff --git a/src/spec/models/registration_service_spec.rb > b/src/spec/models/registration_service_spec.rb > index 40f16f2..2a97d11 100644 > --- a/src/spec/models/registration_service_spec.rb > +++ b/src/spec/models/registration_service_spec.rb > @@ -39,4 +39,26 @@ describe RegistrationService do > end > end > end > + > + it "should register a user with default pool/quota/role when default > settings set" do > + @user = Factory :user > + @pool = Factory(:pool, :name => "default_pool") > + @role = Role.find_by_name("Instance Creator and User") > + @quota = Factory :quota > + > + MetadataObject.set("allow_self_service_logins", "true") > + MetadataObject.set("self_service_default_pool", @pool) > + MetadataObject.set("self_service_default_role", @role) > + MetadataObject.set("self_service_default_quota", @quota) > + > + @registration_service = RegistrationService.new(@user) > + @registration_service.save > + > + @pools = Pool.list_for_user(@user, Privilege::INSTANCE_VIEW) > + @pools.size.should == 1 > + @pools[0].name.should == "default_pool" > + > + @user.quota.maximum_running_instances.should == > @quota.maximum_running_instances > + @user.quota.maximum_total_instances.should == > @quota.maximum_total_instances > + end > end >
_______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
