protected function resolveSelectedType()
 {
     $resolveSelectedType = parent::resolveSelectedType();
     if ($resolveSelectedType === null) {
         $selectedType = UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting(Yii::app()->user->userModel);
         return $this->resolveUserPermissionConfigurationToPermissionType($selectedType);
     }
     return $resolveSelectedType;
 }
 protected function resolveSelectedType()
 {
     if (!$this->model->isNew()) {
         return parent::resolveSelectedType();
     }
     $selectedType = UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting(Yii::app()->user->userModel);
     if (null == $selectedType) {
         return parent::resolveSelectedType();
     } else {
         return static::resolveUserPermissionConfigurationToPermissionType($selectedType);
     }
     return $resolveSelectedType;
 }
 public static function resolveUserDefaultPermissionsByUser(User $user, RedBeanModel $model = null)
 {
     $defaultPermissionSettings = UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($user);
     $nonEveryoneGroup = UserConfigurationFormAdapter::resolveAndGetValue($user, 'defaultPermissionGroupSetting', false);
     $type = DerivedExplicitReadWriteModelPermissionsElement::resolveUserPermissionConfigurationToPermissionType($defaultPermissionSettings);
     $explicitReadWriteModelPermissions = compact('type', 'nonEveryoneGroup');
     $permissions = compact('explicitReadWriteModelPermissions');
     if ($model === null || $model instanceof OwnedSecurableItem) {
         $owner = array('id' => $user->id);
         $permissions = compact('owner', 'explicitReadWriteModelPermissions');
     }
     return $permissions;
 }
Example #4
0
 /**
  * @param SecurableItem $model
  * @param User $user
  * @throws NotSupportedException
  */
 public static function updatePermissionsWithDefaultForModelByUser(SecurableItem $model, User $user)
 {
     if ($model instanceof SecurableItem && count($model->permissions) === 0) {
         $defaultPermission = UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($user);
         $nonEveryoneGroup = UserConfigurationFormAdapter::resolveAndGetValue($user, 'defaultPermissionGroupSetting', false);
         $type = static::resolveDefaultPermissionToExplicitReadWriteModelPermissionsUtilType($defaultPermission);
         $postData = array('explicitReadWriteModelPermissions' => compact('type', 'nonEveryoneGroup'));
         $explicitReadWritePermissions = self::resolveAndMakeExplicitReadWriteModelPermissions($postData, $model);
         $updated = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($model, $explicitReadWritePermissions);
         if (!$updated) {
             throw new NotSupportedException();
         }
     }
 }
 public function testUserCanSaveDefaultPermissions()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $group = Group::getByName('testGroup2');
     // set permission setting to 'everyone' and permission group settings to 'testGroup2'
     $this->setGetArray(array('id' => $super->id));
     $postData = array('defaultPermissionSetting' => UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_EVERYONE, 'defaultPermissionGroupSetting' => $group->id);
     $this->setPostArray(array('UserConfigurationForm' => $postData));
     $this->runControllerWithRedirectExceptionAndGetContent('users/default/configurationEdit', Yii::app()->createUrl('users/default/details', array('id' => $super->id)));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($super), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_EVERYONE);
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($super, 'defaultPermissionGroupSetting', false));
     // set permission setting to 'users and group', set permission group settings to 'testGroup2'
     $this->resetGetArray();
     $this->resetPostArray();
     $this->setGetArray(array('id' => $super->id));
     $postData = array('defaultPermissionSetting' => UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP, 'defaultPermissionGroupSetting' => $group->id);
     $this->setPostArray(array('UserConfigurationForm' => $postData));
     //Make sure the redirect is to the details view and not the list view.
     $this->runControllerWithRedirectExceptionAndGetContent('users/default/configurationEdit', Yii::app()->createUrl('users/default/details', array('id' => $super->id)));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($super), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetValue($super, 'defaultPermissionGroupSetting', false), $group->id);
 }
 /**
  * @depends testListDefault
  */
 public function testListDefaultAfterChange()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $authenticationData = $this->login();
     $headers = array('Accept: application/json', 'ZURMO_SESSION_ID: ' . $authenticationData['sessionId'], 'ZURMO_TOKEN: ' . $authenticationData['token'], 'ZURMO_API_REQUEST_TYPE: REST');
     // change default permissions to a specific group, doesn't matter if it does not exist.
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($super);
     $form->defaultPermissionSetting = UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP;
     $form->defaultPermissionGroupSetting = 6;
     UserConfigurationFormAdapter::setConfigurationFromForm($form, $super);
     unset($form);
     // validate that settings were saved.
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($super), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetValue($super, 'defaultPermissionGroupSetting', false), 6);
     $response = $this->listDefaultPermissionsForCurrentUser($headers);
     $response = json_decode($response, true);
     $this->assertEquals(ApiResponse::STATUS_SUCCESS, $response['status']);
     $this->assertArrayHasKey('data', $response);
     $this->assertCount(2, $response['data']);
     $this->assertArrayHasKey('owner', $response['data']);
     $this->assertCount(1, $response['data']['owner']);
     $this->assertArrayHasKey('id', $response['data']['owner']);
     $this->assertEquals($super->id, $response['data']['owner']['id']);
     $this->assertArrayHasKey('explicitReadWriteModelPermissions', $response['data']);
     $this->assertCount(2, $response['data']['explicitReadWriteModelPermissions']);
     $this->assertArrayHasKey('type', $response['data']['explicitReadWriteModelPermissions']);
     $this->assertEquals(2, $response['data']['explicitReadWriteModelPermissions']['type']);
     $this->assertArrayHasKey('nonEveryoneGroup', $response['data']['explicitReadWriteModelPermissions']);
     $this->assertEquals(6, $response['data']['explicitReadWriteModelPermissions']['nonEveryoneGroup']);
     // change default permissions to owner only.
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($super);
     $form->defaultPermissionSetting = UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER;
     UserConfigurationFormAdapter::setConfigurationFromForm($form, $super);
     unset($form);
     // validate that settings were saved.
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($super), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER);
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($super, 'defaultPermissionGroupSetting', false));
     $response = $this->listDefaultPermissionsForCurrentUser($headers);
     $response = json_decode($response, true);
     $this->assertEquals(ApiResponse::STATUS_SUCCESS, $response['status']);
     $this->assertArrayHasKey('data', $response);
     $this->assertCount(2, $response['data']);
     $this->assertArrayHasKey('owner', $response['data']);
     $this->assertCount(1, $response['data']['owner']);
     $this->assertArrayHasKey('id', $response['data']['owner']);
     $this->assertEquals($super->id, $response['data']['owner']['id']);
     $this->assertArrayHasKey('explicitReadWriteModelPermissions', $response['data']);
     $this->assertCount(2, $response['data']['explicitReadWriteModelPermissions']);
     $this->assertArrayHasKey('type', $response['data']['explicitReadWriteModelPermissions']);
     $this->assertEquals('', $response['data']['explicitReadWriteModelPermissions']['type']);
     $this->assertArrayHasKey('nonEveryoneGroup', $response['data']['explicitReadWriteModelPermissions']);
     $this->assertEquals('', $response['data']['explicitReadWriteModelPermissions']['nonEveryoneGroup']);
 }
 public function testMakeFormAndSetConfigurationFromForm()
 {
     $billy = User::getByUsername('billy');
     $sally = User::getByUsername('sally');
     Yii::app()->pagination->setGlobalValueByType('listPageSize', 50);
     Yii::app()->pagination->setGlobalValueByType('subListPageSize', 51);
     Yii::app()->pagination->setGlobalValueByType('dashboardListPageSize', 52);
     //Confirm sally's configuration is the defaults.
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($sally);
     $this->assertEquals(50, $form->listPageSize);
     $this->assertEquals(51, $form->subListPageSize);
     $this->assertEquals(52, $form->dashboardListPageSize);
     $this->assertEquals('blue', Yii::app()->themeManager->resolveAndGetThemeColorValue($sally));
     $this->assertEquals(null, Yii::app()->themeManager->resolveAndGetBackgroundTextureValue($sally));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideWelcomeView'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'enableDesktopNotifications'));
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'defaultPermissionGroupSetting', false));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($sally), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_EVERYONE);
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideFromSelecting'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideFromLeaderboard'));
     $sally->hideFromLeaderboard = true;
     $sally->hideFromSelecting = true;
     $this->assertTrue($sally->save());
     unset($sally);
     $sally = User::getByUsername('sally');
     $this->assertTrue((bool) $sally->hideFromLeaderboard);
     $this->assertTrue((bool) $sally->hideFromSelecting);
     //Confirm billy's configuration is the defaults.
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($billy);
     $this->assertEquals(50, $form->listPageSize);
     $this->assertEquals(51, $form->subListPageSize);
     $this->assertEquals(52, $form->dashboardListPageSize);
     $this->assertEquals('blue', Yii::app()->themeManager->resolveAndGetThemeColorValue($billy));
     $this->assertEquals(null, Yii::app()->themeManager->resolveAndGetBackgroundTextureValue($billy));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'hideWelcomeView'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'enableDesktopNotifications'));
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'defaultPermissionGroupSetting', false));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($billy), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_EVERYONE);
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideFromSelecting'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideFromLeaderboard'));
     //Now change configuration for Billy.
     $form->listPageSize = 60;
     $form->subListPageSize = 61;
     $form->dashboardListPageSize = 62;
     $form->themeColor = 'lime';
     $form->backgroundTexture = 'paper';
     $form->hideWelcomeView = true;
     $form->enableDesktopNotifications = true;
     $form->defaultPermissionSetting = UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP;
     $form->defaultPermissionGroupSetting = 6;
     $form->hideFromLeaderboard = true;
     $form->hideFromSelecting = true;
     UserConfigurationFormAdapter::setConfigurationFromForm($form, $billy);
     //Confirm billy's settings are changed correctly.
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($billy);
     $this->assertEquals(60, $form->listPageSize);
     $this->assertEquals(61, $form->subListPageSize);
     $this->assertEquals(62, $form->dashboardListPageSize);
     $this->assertEquals('lime', Yii::app()->themeManager->resolveAndGetThemeColorValue($billy));
     $this->assertEquals('paper', Yii::app()->themeManager->resolveAndGetBackgroundTextureValue($billy));
     $this->assertTrue(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'hideWelcomeView'));
     $this->assertTrue(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'enableDesktopNotifications'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideWelcomeView'));
     $this->assertFalse(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'enableDesktopNotifications'));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($billy), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'defaultPermissionGroupSetting', false), 6);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($sally), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_EVERYONE);
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'defaultPermissionGroupSetting', false));
     $this->assertTrue((bool) $billy->hideFromLeaderboard);
     $this->assertTrue((bool) $billy->hideFromSelecting);
     //Now set configuration settings for sally and confirm they are correct.
     Yii::app()->user->userModel = $sally;
     UserConfigurationFormAdapter::setConfigurationFromFormForCurrentUser($form);
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($sally);
     $this->assertEquals(60, $form->listPageSize);
     $this->assertEquals(61, $form->subListPageSize);
     $this->assertEquals(62, $form->dashboardListPageSize);
     $this->assertEquals('lime', Yii::app()->themeManager->resolveAndGetThemeColorValue($sally));
     $this->assertEquals('paper', Yii::app()->themeManager->resolveAndGetBackgroundTextureValue($sally));
     $this->assertTrue(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'hideWelcomeView'));
     $this->assertTrue(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'enableDesktopNotifications'));
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($sally), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER_AND_USERS_IN_GROUP);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetValue($sally, 'defaultPermissionGroupSetting', false), 6);
     $this->assertTrue((bool) $billy->hideFromLeaderboard);
     $this->assertTrue((bool) $billy->hideFromSelecting);
     //Now test that setting defaultPermissionSetting to owner makes the group settings null
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($billy);
     $form->defaultPermissionSetting = UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER;
     $form->defaultPermissionGroupSetting = 4;
     UserConfigurationFormAdapter::setConfigurationFromForm($form, $billy);
     $form = UserConfigurationFormAdapter::makeFormFromUserConfigurationByUser($billy);
     $this->assertEquals(UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($billy), UserConfigurationForm::DEFAULT_PERMISSIONS_SETTING_OWNER);
     $this->assertNull(UserConfigurationFormAdapter::resolveAndGetValue($billy, 'defaultPermissionGroupSetting', false));
 }
 /**
  * Based on the model's attribute value being a explicitReadWriteModelPermissions object,
  * resolves the selected type value.
  * @return string
  */
 protected function resolveSelectedType()
 {
     return UserConfigurationFormAdapter::resolveAndGetDefaultPermissionSetting($this->model->user);
 }