Ejemplo n.º 1
0
 /**
  * @param  $input
  * @throws GeneralException
  * @return bool
  */
 public function create($input)
 {
     if (Role::where('name', $input['name'])->first()) {
         throw new GeneralException(trans('exceptions.backend.access.roles.already_exists'));
     }
     //See if the role has all access
     $all = $input['associated-permissions'] == 'all' ? true : false;
     //This config is only required if all is false
     if (!$all) {
         if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) {
             throw new GeneralException(trans('exceptions.backend.access.roles.needs_permission'));
         }
     }
     $role = new Role();
     $role->name = $input['name'];
     $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0;
     //See if this role has all permissions and set the flag on the role
     $role->all = $all;
     if ($role->save()) {
         if (!$all) {
             $current = explode(',', $input['permissions']);
             $permissions = [];
             if (count($current)) {
                 foreach ($current as $perm) {
                     if (is_numeric($perm)) {
                         array_push($permissions, $perm);
                     }
                 }
             }
             $role->attachPermissions($permissions);
         }
         return true;
     }
     throw new GeneralException(trans('exceptions.backend.access.roles.create_error'));
 }
 /**
  * @param  $input
  * @throws GeneralException
  * @return bool
  */
 public function create($input)
 {
     if (Role::where('name', $input['name'])->first()) {
         throw new GeneralException('That role already exists. Please choose a different name.');
     }
     //See if the role has all access
     $all = $input['associated-permissions'] == 'all' ? true : false;
     //This config is only required if all is false
     if (!$all) {
         if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) {
             throw new GeneralException('You must select at least one permission for this role.');
         }
     }
     $role = new Role();
     $role->name = $input['name'];
     $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0;
     //See if this role has all permissions and set the flag on the role
     $role->all = $all;
     if ($role->save()) {
         if (!$all) {
             $current = explode(',', $input['permissions']);
             $permissions = [];
             if (count($current)) {
                 foreach ($current as $perm) {
                     if (is_numeric($perm)) {
                         array_push($permissions, $perm);
                     }
                 }
             }
             $role->attachPermissions($permissions);
         }
         return true;
     }
     throw new GeneralException('There was a problem creating this role. Please try again.');
 }
 /**
  * @param  Role $role
  * @param  $input
  * @throws GeneralException
  * @return bool
  */
 public function update(Role $role, $input)
 {
     //See if the role has all access, administrator always has all access
     if ($role->id == 1) {
         $all = true;
     } else {
         $all = $input['associated-permissions'] == 'all' ? true : false;
     }
     if (!isset($input['permissions'])) {
         $input['permissions'] = [];
     }
     //This config is only required if all is false
     if (!$all) {
         //See if the role must contain a permission as per config
         if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) {
             throw new GeneralException(trans('exceptions.backend.access.roles.needs_permission'));
         }
     }
     $role->name = $input['name'];
     $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0;
     //See if this role has all permissions and set the flag on the role
     $role->all = $all;
     DB::transaction(function () use($role, $input, $all) {
         if ($role->save()) {
             //If role has all access detach all permissions because they're not needed
             if ($all) {
                 $role->permissions()->sync([]);
             } else {
                 //Remove all roles first
                 $role->permissions()->sync([]);
                 //Attach permissions if the role does not have all access
                 $permissions = [];
                 if (is_array($input['permissions']) && count($input['permissions'])) {
                     foreach ($input['permissions'] as $perm) {
                         if (is_numeric($perm)) {
                             array_push($permissions, $perm);
                         }
                     }
                 }
                 $role->attachPermissions($permissions);
             }
             event(new RoleUpdated($role));
             return true;
         }
         throw new GeneralException(trans('exceptions.backend.access.roles.update_error'));
     });
 }