コード例 #1
0
 /**
  * Sync permissions với actions được 'định nghĩa' trong các resources model
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function sync()
 {
     // actions định nghĩa trong các model
     $resource_actions = app('access-control')->getResourceActions();
     $model_actions = [];
     foreach ($resource_actions as $resource => $actions) {
         $model_actions = array_merge($model_actions, array_map(function ($action) use($resource) {
             return "{$resource}.{$action}";
         }, array_keys($actions)));
     }
     // actions đã lưu trên DB (permissions table)
     $db_actions = array_map(function ($permission) {
         return "{$permission['resource']}.{$permission['action']}";
     }, Permission::all()->toArray());
     // có trong DB, nhưng không có trong model ===> remove
     $remove = array_diff($db_actions, $model_actions);
     foreach ($remove as $action) {
         list($resource, $action_name) = explode('.', $action);
         if ($permission = Permission::whereResource($resource)->whereAction($action_name)->first()) {
             // Permission model sẽ tự động xóa liên kết với roles
             $permission->delete();
         }
     }
     // có định nghĩa trong model, nhưng chưa lưu trong DB ===> insert
     $insert = array_diff($model_actions, $db_actions);
     if ($insert) {
         $permissions = array_map(function ($action) {
             list($resource, $action_name) = explode('.', $action);
             return ['resource' => $resource, 'action' => $action_name];
         }, $insert);
         Permission::insert($permissions);
     }
     return response()->json(['type' => 'success', 'content' => trans('access-control::permission.sync_success')]);
 }
コード例 #2
0
 /**
  * @param \Minhbang\AccessControl\Models\Role $role
  * @param string $ids
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function attachPermission(Role $role, $ids)
 {
     if ($ids = explode(',', trim($ids))) {
         $all_ids = Permission::all()->pluck('id')->all();
         // Chỉ lấy ids là permissions ID
         $ids = array_filter($ids, function ($id) use($all_ids) {
             return in_array($id, $all_ids);
         });
         // Loại bỏ các permissions đã attach vào $role này rồi
         $ids = array_diff($ids, $role->permissions->pluck('id')->all());
         if ($ids) {
             $role->permissions()->attach($ids);
         }
     }
     return response()->json(['type' => 'success', 'content' => trans('access-control::role.attach_permission_success')]);
 }