• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

daycry / auth / 22527658769

28 Feb 2026 07:41PM UTC coverage: 63.267% (-3.6%) from 66.864%
22527658769

push

github

web-flow
Merge pull request #36 from daycry/development

Implement TOTP 2FA, JWT auth, device session tracking, and docs overhaul

465 of 1168 new or added lines in 52 files covered. (39.81%)

129 existing lines in 46 files now uncovered.

3064 of 4843 relevant lines covered (63.27%)

41.53 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Controllers/Admin/PermissionsController.php
1
<?php
2

3
declare(strict_types=1);
4

5
/**
6
 * This file is part of Daycry Auth.
7
 *
8
 * (c) Daycry <daycry9@proton.me>
9
 *
10
 * For the full copyright and license information, please view
11
 * the LICENSE file that was distributed with this source code.
12
 */
13

14
namespace Daycry\Auth\Controllers\Admin;
15

16
use CodeIgniter\HTTP\RedirectResponse;
17
use Daycry\Auth\Entities\Permission;
18
use Daycry\Auth\Models\PermissionModel;
19

20
/**
21
 * Admin Permissions Controller — CRUD for individual permissions.
22
 */
23
class PermissionsController extends BaseAdminController
24
{
25
    /**
26
     * List all permissions.
27
     */
NEW
28
    public function index(): string
×
29
    {
30
        /** @var PermissionModel $permissionModel */
NEW
31
        $permissionModel = model(PermissionModel::class);
×
32

NEW
33
        $permissions = $permissionModel->orderBy('name')->findAll();
×
34

NEW
35
        return $this->view('Daycry\\Auth\\Views\\admin\\permissions\\index', [
×
NEW
36
            'permissions' => $permissions,
×
NEW
37
        ]);
×
38
    }
39

40
    /**
41
     * Show the create form.
42
     */
NEW
43
    public function create(): string
×
44
    {
NEW
45
        return $this->view('Daycry\\Auth\\Views\\admin\\permissions\\form', [
×
NEW
46
            'permission' => null,
×
NEW
47
        ]);
×
48
    }
49

50
    /**
51
     * Persist a new permission.
52
     */
NEW
53
    public function store(): RedirectResponse
×
54
    {
55
        /** @var PermissionModel $permissionModel */
NEW
56
        $permissionModel = model(PermissionModel::class);
×
57

NEW
58
        $name = trim((string) $this->request->getPost('name'));
×
59

NEW
60
        if ($name === '') {
×
NEW
61
            return redirect()->route('admin-permission-create')->with('error', 'Permission name is required.');
×
62
        }
63

NEW
64
        $perm       = new Permission();
×
NEW
65
        $perm->name = $name;
×
66

NEW
67
        if (! $permissionModel->save($perm)) {
×
NEW
68
            return redirect()->route('admin-permission-create')
×
NEW
69
                ->with('errors', $permissionModel->errors());
×
70
        }
71

NEW
72
        return redirect()->route('admin-permissions')
×
NEW
73
            ->with('message', "Permission \"{$name}\" created.");
×
74
    }
75

76
    /**
77
     * Show the edit form.
78
     *
79
     * @param int|string $id
80
     */
NEW
81
    public function edit($id): RedirectResponse|string
×
82
    {
NEW
83
        $perm = $this->findPermOr404((int) $id);
×
84

NEW
85
        if ($perm instanceof RedirectResponse) {
×
NEW
86
            return $perm;
×
87
        }
88

NEW
89
        return $this->view('Daycry\\Auth\\Views\\admin\\permissions\\form', [
×
NEW
90
            'permission' => $perm,
×
NEW
91
        ]);
×
92
    }
93

94
    /**
95
     * Persist edits.
96
     *
97
     * @param int|string $id
98
     */
NEW
99
    public function update($id): RedirectResponse
×
100
    {
NEW
101
        $perm = $this->findPermOr404((int) $id);
×
102

NEW
103
        if ($perm instanceof RedirectResponse) {
×
NEW
104
            return $perm;
×
105
        }
106

107
        /** @var PermissionModel $permissionModel */
NEW
108
        $permissionModel = model(PermissionModel::class);
×
109

NEW
110
        $name = trim((string) $this->request->getPost('name'));
×
111

NEW
112
        if ($name !== '') {
×
NEW
113
            $perm->name = $name;
×
114
        }
115

NEW
116
        $permissionModel->save($perm);
×
117

NEW
118
        return redirect()->route('admin-permissions')
×
NEW
119
            ->with('message', 'Permission updated.');
×
120
    }
121

122
    /**
123
     * Delete a permission.
124
     *
125
     * @param int|string $id
126
     */
NEW
127
    public function delete($id): RedirectResponse
×
128
    {
NEW
129
        $perm = $this->findPermOr404((int) $id);
×
130

NEW
131
        if ($perm instanceof RedirectResponse) {
×
NEW
132
            return $perm;
×
133
        }
134

135
        /** @var PermissionModel $permissionModel */
NEW
136
        $permissionModel = model(PermissionModel::class);
×
NEW
137
        $permissionModel->delete($perm->id, true);
×
138

NEW
139
        return redirect()->route('admin-permissions')
×
NEW
140
            ->with('message', "Permission \"{$perm->name}\" deleted.");
×
141
    }
142

143
    // ── Private helpers ───────────────────────────────────────────
144

NEW
145
    private function findPermOr404(int $id): Permission|RedirectResponse
×
146
    {
147
        /** @var PermissionModel $permissionModel */
NEW
148
        $permissionModel = model(PermissionModel::class);
×
NEW
149
        $perm            = $permissionModel->find($id);
×
150

NEW
151
        if ($perm === null) {
×
NEW
152
            return redirect()->route('admin-permissions')->with('error', 'Permission not found.');
×
153
        }
154

NEW
155
        return $perm;
×
156
    }
157
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc