Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ on:
workflow_dispatch:
pull_request:
branches:
- v4
- main
push:
branches:
- v4
- main

jobs:
test:
Expand All @@ -32,7 +32,7 @@ jobs:
coverage: none

- name: Clone CyanFox-Base
run: git clone --branch v4 https://github.com/CyanFox/Base CyanFox-Base
run: git clone https://github.com/CyanFox/Base CyanFox-Base

- name: Setup problem matchers
run: |
Expand Down
16 changes: 8 additions & 8 deletions Admin/app/Http/Controllers/AdminActivityController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,28 @@

namespace Modules\Admin\Http\Controllers;

use Dedoc\Scramble\Attributes\Group;
use Dedoc\Scramble\Attributes\QueryParameter;
use Illuminate\Http\Request;
use Spatie\Activitylog\Models\Activity;

#[Group('Admin Activity')]
class AdminActivityController
{
#[QueryParameter('per_page', description: 'Number of activity entries per page', type: 'integer', default: 20, example: 10)]
public function getActivity(Request $request)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.activity') || ! $request->attributes->get('api_key')->can('admin.activity')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.activity')) {
return $apiKey->sendNoPermissionResponse();
}

$activityLog = Activity::orderBy('created_at', 'desc')
->paginate($request->query('per_page', 20));

return response()->json([
'message' => 'Activity retrieved successfully',
'activity_log' => $activityLog->map(function (Activity $activity) {
return apiResponse('Activity retrieved successfully',
$activityLog->map(function (Activity $activity) {
$properties = json_decode($activity->properties, true) ?? [];

return [
Expand All @@ -34,7 +35,6 @@ public function getActivity(Request $request)
'old_values' => $properties['old'] ?? [],
'new_values' => $properties['attributes'] ?? [],
];
}),
]);
}));
}
}
64 changes: 27 additions & 37 deletions Admin/app/Http/Controllers/AdminGroupsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,45 +17,41 @@ class AdminGroupsController
#[QueryParameter('per_page', description: 'Number of groups per page', type: 'integer', default: 20, example: 10)]
public function getGroups(Request $request)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.groups') || ! $request->attributes->get('api_key')->can('admin.groups')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.groups')) {
return $apiKey->sendNoPermissionResponse();
}

return response()->json([
'message' => 'Groups retrieved successfully',
'groups' => Role::orderBy('created_at')->paginate($request->query('per_page', 20)),
]);
return apiResponse('Groups retrieved successfully',
Role::orderBy('created_at')->paginate($request->query('per_page', 20)));
}

#[PathParameter('groupId', description: 'ID of the group to retrieve', type: 'integer', example: 1)]
public function getGroup(Request $request, $groupId)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.groups') || ! $request->attributes->get('api_key')->can('admin.groups')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.groups')) {
return $apiKey->sendNoPermissionResponse();
}

$group = Role::find($groupId);

if (! $group) {
return response()->json(['error' => 'Group not found'], 404);
return apiResponse('Group not found', null, false, 404);
}

return response()->json([
'message' => 'Group retrieved successfully',
'group' => $group->load(['permissions']),
]);
return apiResponse('Group retrieved successfully',
$group->load(['permissions']));
}

public function createGroup(Request $request)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.groups.create') || ! $request->attributes->get('api_key')->can('admin.groups.create')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.groups.create')) {
return $apiKey->sendNoPermissionResponse();
}

$request->validate([
Expand All @@ -66,25 +62,23 @@ public function createGroup(Request $request)
$group = CreateGroupAction::run($request->only(['name', 'guard_name']));
$group->syncPermissions($request->input('permissions', []));

return response()->json([
'message' => 'Group created successfully',
'group' => $group->load(['permissions']),
]);
return apiResponse('Group created successfully',
$group->load(['permissions']));
}

#[PathParameter('groupId', description: 'ID of the group to update', type: 'integer', example: 1)]
public function updateGroup(Request $request, $groupId)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.groups.update') || ! $request->attributes->get('api_key')->can('admin.groups.update')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.groups.update')) {
return $apiKey->sendNoPermissionResponse();
}

$group = Role::find($groupId);

if (! $group) {
return response()->json(['error' => 'Group not found'], 404);
return apiResponse('Group not found', null, false, 404);
}

$request->validate([
Expand All @@ -95,31 +89,27 @@ public function updateGroup(Request $request, $groupId)
UpdateGroupAction::run($group, $request->only(['name', 'guard_name']));
$group->syncPermissions($request->input('permissions', []));

return response()->json([
'message' => 'Group updated successfully',
'group' => $group->fresh()->load(['permissions']),
]);
return apiResponse('Group updated successfully',
$group->fresh()->load(['permissions']));
}

#[PathParameter('groupId', description: 'ID of the group to delete', type: 'integer', example: 1)]
public function deleteGroup(Request $request, $groupId)
{
$user = $request->attributes->get('api_key')->user;
$apiKey = $request->attributes->get('api_key');

if (! $user->can('admin.groups.delete') || ! $request->attributes->get('api_key')->can('admin.groups.delete')) {
return response()->json(['error' => 'Unauthorized'], 403);
if (!$apiKey->hasPermission('admin.groups.delete')) {
return $apiKey->sendNoPermissionResponse();
}

$group = Role::find($groupId);

if (! $group) {
return response()->json(['error' => 'Group not found'], 404);
return apiResponse('Group not found', null, false, 404);
}

DeleteGroupAction::run($group);

return response()->json([
'message' => 'Group deleted successfully',
]);
return apiResponse('Group deleted successfully');
}
}
Loading