Ejemplo n.º 1
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $groups = array(array("name" => "Read Only", "description" => "Ability to view most of the settings in the cms.", "permissionIdsFlags" => array(array(1, 0), array(2, 0), array(3, 0), array(4, 0), array(5, 0), array(6, 0), array(8, 0))), array("name" => "Content Management", "description" => "Allows managing media items.", "permissionIdsFlags" => array(array(1, 1))), array("name" => "Shows Management", "description" => "Allows managing shows.", "permissionIdsFlags" => array(array(2, 1))), array("name" => "Playlist Management", "description" => "Allows managing playlists.", "permissionIdsFlags" => array(array(3, 1), array(2, 0), array(1, 0))), array("name" => "Stream Management", "description" => "Allows managing live streams.", "permissionIdsFlags" => array(array(4, 1))), array("name" => "Site Users Management", "description" => "Allows managing site users.", "permissionIdsFlags" => array(array(5, 1))), array("name" => "CMS Users Management", "description" => "Allows managing the CMS users.", "permissionIdsFlags" => array(array(6, 1))), array("name" => "Comments Management", "description" => "Allows managing site comments and commenting as station.", "permissionIdsFlags" => array(array(7, 0))), array("name" => "API Users Management", "description" => "Allows managing API users.", "permissionIdsFlags" => array(array(8, 1))));
     foreach ($groups as $i => $a) {
         $permissionIdsFlags = $a['permissionIdsFlags'];
         unset($a['permissionIdsFlags']);
         $a['position'] = $i;
         $permissionIds = array();
         foreach ($permissionIdsFlags as $b) {
             $permissionIds[] = $b[0];
         }
         $permissions = Permission::whereIn("id", $permissionIds)->get();
         $group = new PermissionGroup($a);
         DB::transaction(function () use(&$group, &$permissions, &$permissionIdsFlags) {
             $group->save();
             foreach ($permissionIdsFlags as $b) {
                 $flag = $b[1];
                 $permissionId = $b[0];
                 $group->permissions()->attach($permissions->find($permissionId), array("permission_flag" => $flag));
             }
         });
     }
     $this->command->info('Permissions groups created and permissions assigned to groups!');
 }
Ejemplo n.º 2
0
 public function postGroupsajaxselect()
 {
     Auth::getUser()->hasPermissionOr401(Config::get("permissions.users"), 0);
     $resp = array("success" => false, "payload" => null);
     $searchTerm = FormHelpers::getValue("term", "");
     $groups = null;
     if (!empty($searchTerm)) {
         $groups = PermissionGroup::search($searchTerm)->orderBy("position", "asc")->get();
     } else {
         $groups = PermissionGroup::orderBy("position", "asc")->get();
     }
     $results = array();
     foreach ($groups as $a) {
         $results[] = array("id" => intval($a->id), "text" => $a->getNameAndDescription());
     }
     $resp['payload'] = array("results" => $results, "term" => $searchTerm);
     $resp['success'] = true;
     return Response::json($resp);
 }
Ejemplo n.º 3
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     // this relies on the permission groups getting the same autoincremented ids each time which should happen
     if (App::environment() !== 'production' || $this->command->confirm('Do you want to create the user "test" with password "password" with admin permissions? [y|n]:', false)) {
         $user = User::create(array("username" => "test", "password_hash" => Hash::make("password"), "admin" => true));
     }
     DB::transaction(function () {
         $user = User::create(array("cosign_user" => "jenkinst", "admin" => true));
         PermissionGroup::find(6)->users()->attach($user);
     });
     DB::transaction(function () {
         $user = User::create(array("cosign_user" => "moscrop", "admin" => false));
         PermissionGroup::find(1)->users()->attach($user);
         PermissionGroup::find(2)->users()->attach($user);
     });
     DB::transaction(function () {
         $user = User::create(array("cosign_user" => "cosborn", "admin" => false));
         PermissionGroup::find(1)->users()->attach($user);
         PermissionGroup::find(2)->users()->attach($user);
         PermissionGroup::find(3)->users()->attach($user);
         PermissionGroup::find(4)->users()->attach($user);
     });
     $this->command->info('CMS users created and attached to groups!');
 }
Ejemplo n.º 4
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     DB::statement('SET FOREIGN_KEY_CHECKS=0;');
     LiveStream::truncate();
     MediaItem::truncate();
     MediaItemComment::truncate();
     MediaItemLike::truncate();
     MediaItemLiveStream::truncate();
     MediaItemVideo::truncate();
     Permission::truncate();
     PermissionGroup::truncate();
     QualityDefinition::truncate();
     LiveStreamUri::truncate();
     Playlist::truncate();
     Show::truncate();
     SiteUser::truncate();
     User::truncate();
     VideoFile::truncate();
     DB::table("media_item_to_playlist")->truncate();
     DB::table("permission_to_group")->truncate();
     DB::table("user_to_group")->truncate();
     DB::statement('SET FOREIGN_KEY_CHECKS=1;');
     $this->command->info('Tables truncated!');
 }
Ejemplo n.º 5
0
 public function anyEdit($id = null)
 {
     Auth::getUser()->hasPermissionOr401(Config::get("permissions.users"), 1);
     $user = null;
     $editing = false;
     if (!is_null($id)) {
         $user = User::with("permissionGroups")->find($id);
         if (is_null($user)) {
             App::abort(404);
             return;
         }
         $editing = true;
     }
     $formSubmitted = isset($_POST['form-submitted']) && $_POST['form-submitted'] === "1";
     // has id 1
     // populate $formData with default values or received values
     $formData = FormHelpers::getFormData(array(array("enabled", ObjectHelpers::getProp(false, $user, "disabled") ? "" : "y"), array("admin", ObjectHelpers::getProp(false, $user, "admin") ? "y" : ""), array("cosign-user", ObjectHelpers::getProp("", $user, "cosign_user")), array("user", ObjectHelpers::getProp("", $user, "username")), array("password", ""), array("password-changed", "0"), array("groups", json_encode(array()))), !$formSubmitted);
     $passwordToDisplay = null;
     if ($formData['password-changed'] === "1") {
         $passwordToDisplay = $formData['password'];
     } else {
         $passwordToDisplay = is_null(ObjectHelpers::getProp(null, $user, "password_hash")) ? "" : null;
     }
     $additionalFormData = array("passwordInitialData" => User::generateContentForPasswordToggleableComponent($passwordToDisplay), "passwordToggleEnabled" => !is_null(ObjectHelpers::getProp(null, $user, "password_hash")), "passwordChanged" => !is_null($passwordToDisplay), "groupsInitialData" => null);
     if (!$formSubmitted) {
         $additionalFormData['groupsInput'] = ObjectHelpers::getProp(json_encode(array()), $user, "groups_for_input");
         $additionalFormData['groupsInitialData'] = ObjectHelpers::getProp(json_encode(array()), $user, "groups_for_orderable_list");
     } else {
         $additionalFormData['groupsInput'] = PermissionGroup::generateInputValueForAjaxSelectOrderableList(JsonHelpers::jsonDecodeOrNull($formData['groups'], true));
         $additionalFormData['groupsInitialData'] = PermissionGroup::generateInitialDataForAjaxSelectOrderableList(JsonHelpers::jsonDecodeOrNull($formData['groups'], true));
     }
     $errors = null;
     if ($formSubmitted) {
         $modelCreated = DB::transaction(function () use(&$formData, &$user, &$errors) {
             Validator::extend('valid_password_changed_val', function ($attribute, $value, $parameters) {
                 return $value === "0" || $value === "1";
             });
             Validator::extend('unique_user', function ($attribute, $value, $parameters) use(&$user) {
                 $currentId = !is_null($user) ? intval($user->id) : null;
                 $q = User::where("username", $value);
                 if (!is_null($currentId)) {
                     $q = $q->where("id", "!=", $currentId);
                 }
                 return $q->count() === 0;
             });
             Validator::extend('unique_cosign_user', function ($attribute, $value, $parameters) use(&$user) {
                 $currentId = !is_null($user) ? intval($user->id) : null;
                 $q = User::where("cosign_user", $value);
                 if (!is_null($currentId)) {
                     $q = $q->where("id", "!=", $currentId);
                 }
                 return $q->count() === 0;
             });
             Validator::extend('valid_groups', function ($attribute, $value, $parameters) {
                 return PermissionGroup::isValidIdsFromAjaxSelectOrderableList(JsonHelpers::jsonDecodeOrNull($value, true));
             });
             $validator = Validator::make($formData, array('password-changed' => array('required', 'valid_password_changed_val'), 'cosign-user' => array('max:32', 'unique_cosign_user'), 'user' => array('required_with:password', 'alpha_dash', 'unique_user'), 'groups' => array('required', 'valid_groups')), array('password-changed.required' => "", 'password-changed.valid_password_changed_val' => "", 'cosign-user.max' => FormHelpers::getLessThanCharactersMsg(32), 'cosign-user.unique_cosign_user' => "There is already another account associated with this username.", 'user.required_with' => FormHelpers::getRequiredMsg(), 'user.required' => FormHelpers::getRequiredMsg(), 'user.unique_user' => "An account with this username already exists.", 'user.alpha_dash' => FormHelpers::getInvalidAlphaDashMsg(), 'password.required' => FormHelpers::getRequiredMsg(), 'groups.required' => FormHelpers::getGenericInvalidMsg(), 'groups.valid_groups' => FormHelpers::getGenericInvalidMsg()));
             // if user has not chosen to change password, but left user empty, this is not allowed.
             // user can only be empty when there is no password set.
             $validator->sometimes("user", "required", function ($input) use(&$formData) {
                 return $formData['password-changed'] === "0";
             });
             $validator->sometimes("password", "required", function ($input) use(&$user, &$formData) {
                 return !empty($formData['user']) && $formData['password-changed'] === "1";
             });
             if (!$validator->fails()) {
                 // everything is good. save model
                 // build the model now. Then validate that there is at least one admin. Done in this order so that resultsInNoAccessibleAdminLogin() works.
                 if (is_null($user)) {
                     $user = new User();
                 }
                 $user->disabled = !FormHelpers::toBoolean($formData['enabled']);
                 $user->admin = FormHelpers::toBoolean($formData['admin']);
                 $user->cosign_user = FormHelpers::nullIfEmpty($formData['cosign-user']);
                 $username = FormHelpers::nullIfEmpty($formData['user']);
                 $user->username = $username;
                 if (!is_null($username)) {
                     if ($formData['password-changed'] === "1") {
                         $password = FormHelpers::nullIfEmpty($formData['password']);
                         $user->password_hash = !is_null($password) ? Hash::make($password) : null;
                     }
                 } else {
                     $user->password_hash = null;
                 }
                 // validate that there is at least one admin with access.
                 $validator = Validator::make($formData, array(), array('enabled.required' => "This user must be enabled otherwise there is no admin on the system with access.", 'admin.required' => "This user must be admin otherwise there is no admin on the system with access.", 'user.required' => "A user is required because there must be at least one admin in the system with a username and password.", 'password.required' => "A password is required because there must be at least one admin in the system with a username and password."));
                 $validator->sometimes(array("enabled", "admin", "user"), "required", function ($input) use(&$user) {
                     return $user->resultsInNoAccessibleAdminLogin();
                 });
                 $validator->sometimes("password", "required", function ($input) use(&$user, &$formData) {
                     return $user->resultsInNoAccessibleAdminLogin() && $formData['password-changed'] === "1";
                 });
                 if (!$validator->fails()) {
                     if ($user->save() === false) {
                         throw new Exception("Error saving User.");
                     }
                     $user->permissionGroups()->detach();
                     // detaches all
                     $ids = json_decode($formData['groups'], true);
                     if (count($ids) > 0) {
                         $groups = PermissionGroup::whereIn("id", $ids)->get();
                         foreach ($groups as $a) {
                             $user->permissionGroups()->attach($a);
                         }
                     }
                     // the transaction callback result is returned out of the transaction function
                     return true;
                 } else {
                     $errors = $validator->messages();
                     return false;
                 }
             } else {
                 $errors = $validator->messages();
                 return false;
             }
         });
         if ($modelCreated) {
             return Redirect::to(Config::get("custom.admin_base_url") . "/users");
         }
         // if not valid then return form again with errors
     }
     $view = View::make('home.admin.users.edit');
     $view->editing = $editing;
     $view->form = $formData;
     $view->additionalForm = $additionalFormData;
     $view->formErrors = $errors;
     $view->cancelUri = Config::get("custom.admin_base_url") . "/users";
     $this->setContent($view, "users", "users-edit");
 }
Ejemplo n.º 6
0
 public function getGroupsForOrderableListAttribute()
 {
     return PermissionGroup::generateInitialDataForAjaxSelectOrderableList($this->getGroupsIdsForReorderableList());
 }