Esempio n. 1
0
 protected function updateResorces(&$db_resources_map, &$config_resources)
 {
     $db_resources = array_keys($db_resources_map);
     $config_resources = array_keys($config_resources);
     // delete group resources that are not in config
     $not_in_config_resources = array_diff($db_resources, $config_resources);
     if (count($not_in_config_resources)) {
         GroupResources::whereIn('resource', $not_in_config_resources)->delete();
     }
     // delete role permissions then are not in config
     $deleted_permission_ids = array();
     foreach ($not_in_config_resources as $deleted_resource) {
         $deleted_permission_ids[] = $db_resources_map[$deleted_resource];
     }
     if (count($deleted_permission_ids)) {
         RolePermission::whereIn('permission_id', $deleted_permission_ids)->delete();
     }
     // add the new resources
     $new_resources = array_diff($config_resources, $db_resources);
     \Eloquent::unguard();
     foreach ($new_resources as $resource) {
         GroupResources::create(array('resource' => $resource));
     }
     \Eloquent::reguard();
     GroupResources::refreshGroupResources();
 }
 public static function updateRolePermissions(AclRole $role)
 {
     $group_resources = GroupResources::getGroupResources();
     $perm_ids = [];
     /* @var $perm \Volicon\Acl\AclPermission */
     foreach ($role->permissions as $key => $perm) {
         $permission_id = $group_resources->search($perm->resource);
         $perm_ids[] = $permission_id;
         $role->permissions[$key]->permission_id = $permission_id;
         if ($permission_id === FALSE) {
             throw new \Exception('Resource not exists: ' . $perm->resource);
         }
     }
     $db_role_perm = RolePermission::where('role_id', '=', $role->role_id)->get()->keyBy('permission_id');
     $db_perm_ids = $db_role_perm->lists('permission_id');
     $perm_to_delete = array_diff($db_perm_ids, $perm_ids);
     $perm_to_add = array_diff($perm_ids, $db_perm_ids);
     if ($perm_to_delete) {
         RolePermission::where('role_id', '=', $role->role_id)->whereIn('permission_id', $perm_to_delete)->delete();
     }
     foreach ($role->permissions as $perm) {
         if (in_array($perm->permission_id, $perm_to_add)) {
             RolePermission::create(['role_id' => $role->role_id, 'permission_id' => $perm->permission_id, 'values' => json_encode($perm->values), 'allowed' => $perm->allowed]);
         } else {
             RolePermission::where('role_id', '=', $role->role_id)->where('permission_id', '=', $perm->permission_id)->update(['values' => json_encode($perm->values), 'allowed' => $perm->allowed]);
         }
     }
 }
Esempio n. 3
0
 public static function updateRole(AclRole $role)
 {
     DB::beginTransaction();
     $dbRole = static::find($role->role_id);
     if (!$dbRole) {
         throw new Exception("Role not found: " . $role->role_id);
     }
     if ($dbRole->name !== $role->name && !$dbRole->default) {
         $dbRole->name = $role->name;
         $dbRole->save();
     }
     RolePermission::updateRolePermissions($role);
     UserRole::updateRoleUsers($role);
     DB::commit();
     return $role->role_id;
 }