Issues (124)

src/Http/Controllers/PermissionController.php (7 issues)

1
<?php
2
3
namespace CodexShaper\DBM\Http\Controllers;
4
5
use CodexShaper\DBM\Facades\Manager as DBM;
6
use Illuminate\Http\Request;
7
8
class PermissionController extends Controller
9
{
10
    /**
11
     * Get all permissions.
12
     *
13
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
14
     */
15
    public function index()
16
    {
17
        return view('dbm::app');
18
    }
19
20
    /**
21
     * Get all users with permissions.
22
     *
23
     * @return \Illuminate\Http\JsonResponse
24
     */
25
    public function all(Request $request)
26
    {
27
        if ($request->ajax()) {
28
            if (($response = DBM::authorize('permission.browse')) !== true) {
0 ignored issues
show
The condition $response = CodexShaper\...ssion.browse') !== true is always true.
Loading history...
29
                return $response;
30
            }
31
32
            try {
33
                $users = $this->getUsers($request);
34
35
                $privileges = DBM::Permission()->all();
36
37
                $permissions = new \StdClass;
38
                $permissions->database = DBM::Permission()->where('prefix', 'database')->get();
39
                $permissions->crud = DBM::Permission()->where('prefix', 'crud')->get();
40
                $permissions->relationship = DBM::Permission()->where('prefix', 'relationship')->get();
41
                $permissions->record = DBM::Permission()->where('prefix', 'record')->get();
42
                $permissions->backup = DBM::Permission()->where('prefix', 'backup')->get();
43
                $permissions->permission = DBM::Permission()->where('prefix', 'permission')->get();
44
45
                return response()->json([
46
                    'success' => true,
47
                    'privileges' => $privileges,
48
                    'permissions' => $permissions,
49
                    'pagination' => $users,
50
                ]);
51
            } catch (\Exception $e) {
52
                return response()->json([
53
                    'success' => false,
54
                    'errors' => [$e->getMessage()],
55
                ], 200);
56
            }
57
        }
58
59
        return response()->json(['success' => false]);
60
    }
61
62
    /**
63
     * get Permission Users.
64
     *
65
     * @return \Illuminate\Support\Collection|array
66
     */
67
    public function getUsers(Request $request)
68
    {
69
        $user_model = config('dbm.auth.user.model');
70
        $user_table = config('dbm.auth.user.table');
71
        $user_local_key = config('dbm.auth.user.local_key');
0 ignored issues
show
The assignment to $user_local_key is dead and can be removed.
Loading history...
72
        $user_display_name = config('dbm.auth.user.display_name');
73
74
        $perPage = (int) $request->perPage;
75
        $query = $request->q;
76
        $users = DBM::model($user_model, $user_table)->paginate($perPage);
77
78
        if (! empty($query)) {
79
            $users = DBM::model($user_model, $user_table)
80
                ->where('name', 'LIKE', '%'.$query.'%')
81
                ->paginate($perPage);
82
        }
83
84
        $users->getCollection()->transform(function ($user) use ($user_display_name) {
85
            $user->permissions = DBM::Object()
86
                ->setManyToManyRelation(
87
                    $user,
88
                    DBM::Permission(),
89
                    'dbm_user_permissions',
90
                    'user_id',
91
                    'dbm_permission_id'
92
                )
93
                ->belongs_to_many;
0 ignored issues
show
The property belongs_to_many does not seem to exist on CodexShaper\DBM\Models\DBM_Object. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
94
            $user->display_name = $user_display_name;
95
96
            return $user;
97
        });
98
99
        return $users;
100
    }
101
102
    /**
103
     * Assign Permissions to User.
104
     *
105
     * @return \Illuminate\Http\JsonResponse
106
     */
107
    public function assignUserPermissions(Request $request)
108
    {
109
        if ($request->ajax()) {
110
            if (($response = DBM::authorize('permission.create')) !== true) {
0 ignored issues
show
The condition $response = CodexShaper\...ssion.create') !== true is always true.
Loading history...
111
                return $response;
112
            }
113
114
            $privileges = $request->privileges;
115
            $user = (object) $request->user;
116
117
            $this->getRelation($user)->attach($privileges);
118
119
            return response()->json(['success' => true]);
120
        }
121
122
        return response()->json(['success' => false]);
123
    }
124
125
    /**
126
     * Update User Permissions.
127
     *
128
     * @return \Illuminate\Http\JsonResponse
129
     */
130
    public function syncUserPermissions(Request $request)
131
    {
132
        if ($request->ajax()) {
133
            if (($response = DBM::authorize('permission.update')) !== true) {
0 ignored issues
show
The condition $response = CodexShaper\...ssion.update') !== true is always true.
Loading history...
134
                return $response;
135
            }
136
137
            $privileges = $request->privileges;
138
            $user = (object) $request->user;
139
140
            $this->getRelation($user)->sync($privileges);
141
142
            return response()->json(['success' => true]);
143
        }
144
145
        return response()->json(['success' => false]);
146
    }
147
148
    /**
149
     * Delete User Permissions.
150
     *
151
     * @return \Illuminate\Http\JsonResponse
152
     */
153
    public function deleteUserPermissions(Request $request)
154
    {
155
        if ($request->ajax()) {
156
            if (($response = DBM::authorize('permission.delete')) !== true) {
0 ignored issues
show
The condition $response = CodexShaper\...ssion.delete') !== true is always true.
Loading history...
157
                return $response;
158
            }
159
160
            $user = json_decode($request->user);
161
162
            $this->getRelation($user)->detach();
163
164
            return response()->json(['success' => true]);
165
        }
166
167
        return response()->json(['success' => false]);
168
    }
169
170
    /**
171
     * Get User Relation.
172
     *
173
     * @param object $user
174
     *
175
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
176
     */
177
    protected function getRelation($user)
178
    {
179
        $user_model = config('dbm.auth.user.model');
180
        $user_table = config('dbm.auth.user.table');
181
        $user_local_key = config('dbm.auth.user.local_key');
182
        $user_display_name = config('dbm.auth.user.display_name');
0 ignored issues
show
The assignment to $user_display_name is dead and can be removed.
Loading history...
183
184
        $localModel = DBM::model($user_model, $user_table)
185
            ->where($user_local_key, $user->{$user_local_key})
186
            ->first();
187
188
        return DBM::Object()
189
            ->setManyToManyRelation(
190
                $localModel,
191
                DBM::Permission(),
192
                'dbm_user_permissions',
193
                'user_id',
194
                'dbm_permission_id'
195
            )
196
            ->belongs_to_many();
197
    }
198
}
199