소스 검색

Update ParentalControls, map updated saved permissions/roles

Daniel Supernault 1 년 전
부모
커밋
9d365d07f9
2개의 변경된 파일45개의 추가작업 그리고 2개의 파일을 삭제
  1. 5 1
      app/Http/Controllers/ParentalControlsController.php
  2. 40 1
      app/Services/UserRoleService.php

+ 5 - 1
app/Http/Controllers/ParentalControlsController.php

@@ -59,9 +59,13 @@ class ParentalControlsController extends Controller
     {
         $this->authPreflight($request);
         $uid = $request->user()->id;
+        $ff = $this->requestFormFields($request);
         $pc = ParentalControls::whereParentId($uid)->findOrFail($id);
-        $pc->permissions = $this->requestFormFields($request);
+        $pc->permissions = $ff;
         $pc->save();
+
+        $roles = UserRoleService::mapActions($pc->child_id, $ff);
+        UserRoles::whereUserId($pc->child_id)->update(['roles' => $roles]);
         return redirect($pc->manageUrl() . '?permissions');
     }
 

+ 40 - 1
app/Services/UserRoleService.php

@@ -179,7 +179,7 @@ class UserRoleService
         ];
 
         foreach ($map as $key => $value) {
-            if(!isset($data[$value], $data[substr($value, 1)])) {
+            if(!isset($data[$value]) && !isset($data[substr($value, 1)])) {
                 $map[$key] = false;
                 continue;
             }
@@ -188,4 +188,43 @@ class UserRoleService
 
         return $map;
     }
+
+    public static function mapActions($id, $data = [])
+    {
+        $res = [];
+        $map = [
+            'account-force-private' => 'private',
+            'account-ignore-follow-requests' => 'private',
+
+            'can-view-public-feed' => 'discovery_feeds',
+            'can-view-network-feed' => 'discovery_feeds',
+            'can-view-discover' => 'discovery_feeds',
+            'can-view-hashtag-feed' => 'discovery_feeds',
+
+            'can-post' => 'post',
+            'can-comment' => 'comment',
+            'can-like' => 'like',
+            'can-share' => 'share',
+
+            'can-follow' => 'follow',
+            'can-make-public' => '!private',
+
+            'can-direct-message' => 'dms',
+            'can-use-stories' => 'story',
+            'can-view-sensitive' => '!hide_cw',
+            'can-bookmark' => 'bookmark',
+            'can-collections' => 'collection',
+            'can-federation' => 'federation',
+        ];
+
+        foreach ($map as $key => $value) {
+            if(!isset($data[$value]) && !isset($data[substr($value, 1)])) {
+                $res[$key] = false;
+                continue;
+            }
+            $res[$key] = str_starts_with($value, '!') ? !$data[substr($value, 1)] : $data[$value];
+        }
+
+        return $res;
+    }
 }