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); } } }
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(); } }
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; }); }