Beispiel #1
0
 public function put_update()
 {
     $post_modules = Input::get('modules');
     $group_id = Input::get('group_id');
     $action = Input::get('btnAction');
     $post_rules = Input::get('module_roles');
     if (isset($group_id) and !empty($group_id) and ctype_digit($group_id)) {
         Permission::update_permissions($group_id, $post_rules, $post_modules);
         Event::fire('mwi.permissions_updated', array('modules' => $post_modules, 'group_id' => $group_id));
         $this->data['message'] = __('permissions::lang.Permissions were successfully updated')->get(ADM_LANG);
         $this->data['message_type'] = 'success';
         if ($action == 'save') {
             return Redirect::to(ADM_URI . '/permissions/' . $group_id . '/edit')->with($this->data);
         } else {
             // 'save_exit' action
             return Redirect::to(ADM_URI . '/groups')->with($this->data);
         }
     } else {
         // module id's and group_id not posted
         // no changes made
         if ($action == 'save') {
             return Redirect::to(ADM_URI . '/permissions/group/' . $group_id)->with($this->data);
         } else {
             // 'save_exit' action
             return Redirect::to(ADM_URI . '/groups')->with($this->data);
         }
     }
 }
Beispiel #2
0
 public static function update_permissions($group_id, $post_rules, $post_modules)
 {
     // if post_modules is empty erase all rules
     if (!isset($post_modules) or empty($post_modules)) {
         $perm_to_erase = Permission::where('group_id', '=', $group_id)->delete();
         //VERY IMPORTANT
         return;
     }
     // Get the modules id name and roles
     $modules = \Modules\Model\Module::where_in('id', $post_modules)->get(array('id', 'slug', 'roles'));
     // If the permission has just one field and it was unckecked
     // erase it from the permissions table
     $perm_to_erase = Permission::where_not_in('module_id', $post_modules)->where('group_id', '=', $group_id)->get();
     if (isset($perm_to_erase) and !empty($perm_to_erase)) {
         foreach ($perm_to_erase as $permission) {
             $permission->delete();
         }
     }
     unset($perm_to_erase);
     foreach ($modules as $module) {
         $permission = Permission::where('group_id', '=', $group_id)->where('module_id', '=', $module->id)->first();
         if (empty($permission)) {
             $permission = new Permission();
             $permission->module_id = $module->id;
             $permission->group_id = $group_id;
             $permission->module_name = $module->slug;
             $permission->roles = $module->roles;
         }
         $permission->roles = json_decode($permission->roles, true);
         if ($permission->roles == null) {
             $permission->roles = json_decode($module->roles, true);
         }
         $tmp_permission = $permission->roles;
         $result = array();
         foreach ($tmp_permission as $role) {
             $tmp['name'] = $role['name'];
             $tmp['description'] = isset($role['name']) ?: 'No description provided for this role.';
             $tmp['slug'] = $role['slug'];
             if (isset($post_rules[$module->id][$role['slug']])) {
                 $tmp['value'] = true;
             } else {
                 $tmp['value'] = false;
             }
             $result[] = $tmp;
         }
         $permissions_result = $permission->roles = json_encode($result);
         $permission->save();
     }
 }
Beispiel #3
0
 public static function group_has_role($module, $role)
 {
     // User with id 1 should be administrator
     if (self::$user->id == 1) {
         return true;
     }
     // Get the user Group
     if (!isset(self::$user->group_id)) {
         return false;
     }
     self::$user_group = \Groups\Model\Group::find(self::$user->group_id);
     if (!isset(self::$user_group) or empty(self::$user_group)) {
         //Group was not found
         return false;
     }
     if (self::$user_group->slug == 'admin') {
         // this is an administrator
         return true;
     }
     $permission = Permission::where_group_id(self::$user->group->id)->where_module_name($module)->first();
     if (!isset($permission) or empty($permission)) {
         // The role is not even in the permissions table
         return false;
     }
     $roles = json_decode($permission->roles, true);
     if (!isset($roles) or empty($roles)) {
         //failed to decode json from permissions table
         return false;
     }
     return $find_role = array_filter($roles, function ($roles) use($role) {
         if ($roles['slug'] == $role and $roles['value'] == true) {
             return true;
         }
         return false;
     });
 }