Skip to content

Commit 87abab5

Browse files
committed
Basic UI for permission assignments
1 parent 669ac3e commit 87abab5

5 files changed

Lines changed: 108 additions & 60 deletions

File tree

‎ProcessMaker/Http/Controllers/Admin/GroupController.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ public function index()
2727
*/
2828
public function edit(Group $group)
2929
{
30-
$groupedPermissions = Permission::resourceTitleList();
30+
$permissionNames = $group->permissions()->pluck('name')->toArray();
3131
$users = User::where('status', 'ACTIVE')->get();
32-
return view('admin.groups.edit', compact('group', 'users', 'groupedPermissions'));
32+
return view('admin.groups.edit', compact('group', 'users', 'permissionNames'));
3333
}
3434

3535
public function show(Group $group)

‎ProcessMaker/Http/Controllers/Admin/UserController.php‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ public function edit(User $user)
3636
//include memberships
3737
$user->memberships = $user->groupMembersFromMemberable()->get();
3838
$groups = $this->getAllGroups();
39-
$permission_ids = $user->permissionAssignments()->pluck('permission_id')->toArray();
40-
$all_permissions = Permission::all();
41-
$users_permission_ids = $this->user_permission_ids($user);
42-
$groupedPermissions = Permission::resourceTitleList();
39+
$permissionNames = $user->permissions()->pluck('name')->toArray();
4340

4441
$currentUser = $user;
4542
$states = JsonData::states();
@@ -59,8 +56,8 @@ function ($result, $item) {
5956
}
6057
);
6158

62-
return view('admin.users.edit', compact(['user', 'groups', 'all_permissions', 'users_permission_ids', 'permission_ids',
63-
'states', 'timezones', 'countries', 'datetimeFormats', 'groupedPermissions'
59+
return view('admin.users.edit', compact(['user', 'groups', 'permissionNames',
60+
'states', 'timezones', 'countries', 'datetimeFormats',
6461
]));
6562
}
6663

@@ -83,9 +80,4 @@ private function getAllGroups()
8380
{
8481
return Group::where('status', 'ACTIVE')->get();
8582
}
86-
87-
private function user_permission_ids($user)
88-
{
89-
return $user->permissionAssignments()->pluck('permission_id')->toArray();
90-
}
9183
}

‎resources/views/admin/groups/edit.blade.php‎

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
@include('admin.shared.permissions')
7979
<div class="text-right mt-2">
8080
{!! Form::button('Cancel', ['class'=>'btn btn-outline-success', '@click' => 'onClose'])!!}
81-
{!! Form::button('Update', ['class'=>'btn btn-success ml-2', '@click' => 'profileUpdate'])!!}
81+
{!! Form::button('Update', ['class'=>'btn btn-success ml-2', '@click' => 'permissionUpdate'])!!}
8282
</div>
8383
</div>
8484
</div>
@@ -159,14 +159,38 @@ class="multiselect__tag-icon"></i>
159159
'description': null,
160160
'status': null
161161
},
162+
groupPermissionNames: @json($permissionNames),
163+
selectedPermissions: [],
162164
selectedUsers: [],
163165
availableUsers: @json($users)
164166
}
165167
},
168+
created() {
169+
this.hasPermission()
170+
},
166171
methods: {
172+
checkCreate(sibling, $event) {
173+
let self = $event.target.value;
174+
if (this.selectedPermissions.includes(self)) {
175+
this.selectedPermissions.push(sibling);
176+
}
177+
},
178+
checkEdit(sibling, $event) {
179+
let self = $event.target.value;
180+
if (! this.selectedPermissions.includes(self)) {
181+
this.selectedPermissions = this.selectedPermissions.filter(function(el) {
182+
return el !== sibling;
183+
});
184+
}
185+
},
167186
customLabel(options) {
168187
return `${options.fullname}`
169188
},
189+
hasPermission() {
190+
if (this.groupPermissionNames) {
191+
this.selectedPermissions = this.groupPermissionNames;
192+
}
193+
},
170194
onSave() {
171195
let that = this;
172196
this.selectedUsers.forEach(function (user) {
@@ -204,6 +228,16 @@ class="multiselect__tag-icon"></i>
204228
this.errors = error.response.data.errors;
205229
}
206230
});
231+
},
232+
permissionUpdate() {
233+
ProcessMaker.apiClient.put("/permissions", {
234+
permission_names: this.selectedPermissions,
235+
group_id: this.formData.id
236+
})
237+
.then(response => {
238+
ProcessMaker.alert('{{__('Group Permissions Updated Successfully ')}}', 'success');
239+
this.onClose();
240+
})
207241
}
208242
}
209243
});

‎resources/views/admin/shared/permissions.blade.php‎

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</div>
99
<div id="requests" class="collapse" >
1010
<div class="card-body">
11-
<label><input type="checkbox" value="view-all_requests" v-model="selected"> {{__('View All Requests')}}</label><br>
11+
<label><input type="checkbox" value="view-all_requests" v-model="selectedPermissions"> {{__('View All Requests')}}</label>
1212
</div>
1313
</div>
1414
</div>
@@ -22,10 +22,10 @@
2222
</div>
2323
<div id="scripts" class="collapse" >
2424
<div class="card-body">
25-
<label><input type="checkbox" value="view-scripts" v-model="selected"> {{__('View Scripts')}}</label><br>
26-
<label><input type="checkbox" value="create-scripts" v-model="checked" ref="'scripts'"> {{__('Create Scripts')}}</label><br>
27-
<label><input type="checkbox" value="edit-scripts" v-model="checked" ref="'scripts'"> {{__('Edit Scripts')}}</label><br>
28-
<label><input type="checkbox" value="delete-scripts" v-model="selected"> {{__('Delete Scripts')}}</label><br>
25+
<label><input type="checkbox" name="view-scripts" value="view-scripts" v-model="selectedPermissions"> {{__('View Scripts')}}</label>
26+
<label><input type="checkbox" name="create-scripts" value="create-scripts" v-model="selectedPermissions" @change="checkCreate('edit-scripts', $event)"> {{__('Create Scripts')}}</label>
27+
<label><input type="checkbox" name="edit-scripts" value="edit-scripts" v-model="selectedPermissions" @change="checkEdit('create-scripts', $event)"> {{__('Edit Scripts')}}</label>
28+
<label><input type="checkbox" name="delete-scripts" value="delete-scripts" v-model="selectedPermissions"> {{__('Delete Scripts')}}</label>
2929
</div>
3030
</div>
3131
</div>
@@ -39,10 +39,10 @@
3939
</div>
4040
<div id="categories" class="collapse" >
4141
<div class="card-body">
42-
<label><input type="checkbox" value="view-categories" v-model="selected"> {{__('View Categories')}}</label><br>
43-
<label><input type="checkbox" value="create-categories" v-model="selected"> {{__('Create Categories')}}</label><br>
44-
<label><input type="checkbox" value="edit-categories" v-model="selected"> {{__('Edit Categories')}}</label><br>
45-
<label><input type="checkbox" value="delete-categories" v-model="selected"> {{__('Delete Categories')}}</label><br>
42+
<label><input type="checkbox" value="view-categories" v-model="selectedPermissions"> {{__('View Categories')}}</label>
43+
<label><input type="checkbox" value="create-categories" v-model="selectedPermissions" @change="checkCreate('edit-categories', $event)"> {{__('Create Categories')}}</label>
44+
<label><input type="checkbox" value="edit-categories" v-model="selectedPermissions" @change="checkEdit('create-categories', $event)"> {{__('Edit Categories')}}</label>
45+
<label><input type="checkbox" value="delete-categories" v-model="selectedPermissions"> {{__('Delete Categories')}}</label>
4646
</div>
4747
</div>
4848
</div>
@@ -56,10 +56,10 @@
5656
</div>
5757
<div id="screens" class="collapse" >
5858
<div class="card-body">
59-
<label><input type="checkbox" value="view-screens" v-model="selected"> {{__('View Screens')}}</label><br>
60-
<label><input type="checkbox" value="create-screens" v-model="selected"> {{__('Create Screens')}}</label><br>
61-
<label><input type="checkbox" value="edit-screens" v-model="selected"> {{__('Edit Screens')}}</label><br>
62-
<label><input type="checkbox" value="delete-screens" v-model="selected"> {{__('Delete Screens')}}</label><br>
59+
<label><input type="checkbox" value="view-screens" v-model="selectedPermissions"> {{__('View Screens')}}</label>
60+
<label><input type="checkbox" value="create-screens" v-model="selectedPermissions" @change="checkCreate('edit-screens', $event)"> {{__('Create Screens')}}</label>
61+
<label><input type="checkbox" value="edit-screens" v-model="selectedPermissions" @change="checkEdit('create-screens', $event)"> {{__('Edit Screens')}}</label>
62+
<label><input type="checkbox" value="delete-screens" v-model="selectedPermissions"> {{__('Delete Screens')}}</label>
6363
</div>
6464
</div>
6565
</div>
@@ -73,10 +73,10 @@
7373
</div>
7474
<div id="environment_variables" class="collapse" >
7575
<div class="card-body">
76-
<label><input type="checkbox" value="view-environment_variables" v-model="selected"> {{__('View Environment Variables')}}</label><br>
77-
<label><input type="checkbox" value="create-environment_variables" v-model="selected"> {{__('Create Environment Variables')}}</label><br>
78-
<label><input type="checkbox" value="edit-environment_variables" v-model="selected"> {{__('Edit Environment Variables')}}</label><br>
79-
<label><input type="checkbox" value="delete-environment_variables" v-model="selected"> {{__('Delete Environment Variables')}}</label><br>
76+
<label><input type="checkbox" value="view-environment_variables" v-model="selectedPermissions"> {{__('View Environment Variables')}}</label>
77+
<label><input type="checkbox" value="create-environment_variables" v-model="selectedPermissions" @change="checkCreate('edit-environment_variables', $event)"> {{__('Create Environment Variables')}}</label>
78+
<label><input type="checkbox" value="edit-environment_variables" v-model="selectedPermissions" @change="checkEdit('create-environment_variables', $event)"> {{__('Edit Environment Variables')}}</label>
79+
<label><input type="checkbox" value="delete-environment_variables" v-model="selectedPermissions"> {{__('Delete Environment Variables')}}</label>
8080
</div>
8181
</div>
8282
</div>
@@ -90,10 +90,10 @@
9090
</div>
9191
<div id="users" class="collapse" >
9292
<div class="card-body">
93-
<label><input type="checkbox" value="view-users" v-model="selected"> {{__('View Users')}}</label><br>
94-
<label><input type="checkbox" value="create-users" v-model="selected"> {{__('Create Users')}}</label><br>
95-
<label><input type="checkbox" value="edit-users" v-model="selected"> {{__('Edit Users')}}</label><br>
96-
<label><input type="checkbox" value="delete-users" v-model="selected"> {{__('Delete Users')}}</label><br>
93+
<label><input type="checkbox" value="view-users" v-model="selectedPermissions"> {{__('View Users')}}</label>
94+
<label><input type="checkbox" value="create-users" v-model="selectedPermissions" @change="checkCreate('edit-users', $event)"> {{__('Create Users')}}</label>
95+
<label><input type="checkbox" value="edit-users" v-model="selectedPermissions" @change="checkEdit('create-users', $event)"> {{__('Edit Users')}}</label>
96+
<label><input type="checkbox" value="delete-users" v-model="selectedPermissions"> {{__('Delete Users')}}</label>
9797
</div>
9898
</div>
9999
</div>
@@ -107,10 +107,10 @@
107107
</div>
108108
<div id="groups" class="collapse" >
109109
<div class="card-body">
110-
<label><input type="checkbox" value="view-groups" v-model="selected"> {{__('View Groups')}}</label><br>
111-
<label><input type="checkbox" value="create-groups" v-model="selected"> {{__('Create Groups')}}</label><br>
112-
<label><input type="checkbox" value="edit-groups" v-model="selected"> {{__('Edit Groups')}}</label><br>
113-
<label><input type="checkbox" value="delete-groups" v-model="selected"> {{__('Delete Groups')}}</label><br>
110+
<label><input type="checkbox" value="view-groups" v-model="selectedPermissions"> {{__('View Groups')}}</label>
111+
<label><input type="checkbox" value="create-groups" v-model="selectedPermissions" @change="checkCreate('edit-groups', $event)"> {{__('Create Groups')}}</label>
112+
<label><input type="checkbox" value="edit-groups" v-model="selectedPermissions" @change="checkEdit('create-groups', $event)"> {{__('Edit Groups')}}</label>
113+
<label><input type="checkbox" value="delete-groups" v-model="selectedPermissions"> {{__('Delete Groups')}}</label>
114114
</div>
115115
</div>
116116
</div>
@@ -124,7 +124,15 @@
124124
</div>
125125
<div id="processes" class="collapse" >
126126
<div class="card-body">
127-
<label><input type="checkbox" value="view-processes" v-model="selected"> {{__('View Processes')}}</label><br>
127+
<label><input type="checkbox" value="view-processes" v-model="selectedPermissions"> {{__('View Processes')}}</label>
128128
</div>
129129
</div>
130-
</div>
130+
</div>
131+
132+
@section('css')
133+
<style scoped>
134+
.card-body label {
135+
display: block;
136+
}
137+
</style>
138+
@endsection

‎resources/views/admin/users/edit.blade.php‎

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@
265265
</div>
266266
<div class="text-right mt-2">
267267
{!! Form::button('Cancel', ['class'=>'btn btn-outline-success', '@click' => 'onClose'])!!}
268-
{!! Form::button('Update', ['class'=>'btn btn-success ml-2', '@click' => 'profileUpdate'])!!}
268+
{!! Form::button('Update', ['class'=>'btn btn-success ml-2', '@click' => 'permissionUpdate'])!!}
269269
</div>
270270
</div>
271271

@@ -433,9 +433,8 @@
433433
status: null,
434434
is_administrator: null,
435435
},
436-
permissions: @json($all_permissions),
437-
userPermissionIds: @json($permission_ids),
438-
selected: [],
436+
userPermissionNames: @json($permissionNames),
437+
selectedPermissions: [],
439438
selectAll: false,
440439
newToken: null,
441440
apiTokens: [],
@@ -459,6 +458,20 @@
459458
this.loadTokens();
460459
},
461460
methods: {
461+
checkCreate(sibling, $event) {
462+
let self = $event.target.value;
463+
if (this.selectedPermissions.includes(self)) {
464+
this.selectedPermissions.push(sibling);
465+
}
466+
},
467+
checkEdit(sibling, $event) {
468+
let self = $event.target.value;
469+
if (! this.selectedPermissions.includes(self)) {
470+
this.selectedPermissions = this.selectedPermissions.filter(function(el) {
471+
return el !== sibling;
472+
});
473+
}
474+
},
462475
copyTextArea() {
463476
this.$refs.text.select();
464477
document.execCommand('copy');
@@ -502,35 +515,36 @@
502515
if (!this.validatePassword()) return false;
503516
ProcessMaker.apiClient.put('users/' + this.formData.id, this.formData)
504517
.then(response => {
505-
this.permissionUpdate()
518+
ProcessMaker.alert('{{__('User Updated Successfully ')}}', 'success');
519+
this.onClose();
506520
})
507521
.catch(error => {
508522
ProcessMaker.alert('{{__('An error occurred while saving the Groups.')}}', 'danger');
509523
});
510524
},
525+
permissionUpdate() {
526+
ProcessMaker.apiClient.put("/permissions", {
527+
permission_names: this.selectedPermissions,
528+
user_id: this.formData.id
529+
})
530+
.then(response => {
531+
ProcessMaker.alert('{{__('User Permissions Updated Successfully ')}}', 'success');
532+
this.onClose();
533+
})
534+
},
511535
hasPermission() {
512-
if (this.userPermissionIds) {
513-
this.selected = this.userPermissionIds
536+
if (this.userPermissionNames) {
537+
this.selectedPermissions = this.userPermissionNames;
514538
}
515539
},
516540
select() {
517-
this.selected = [];
541+
this.selectedPermissions = [];
518542
if (!this.selectAll) {
519543
for (let permission in this.permissions) {
520-
this.selected.push(this.permissions[permission].id);
544+
this.selectedPermissions.push(this.permissions[permission].name);
521545
}
522546
}
523547
},
524-
permissionUpdate() {
525-
ProcessMaker.apiClient.put("/permissions", {
526-
permission_ids: this.selected,
527-
user_id: this.formData.id
528-
})
529-
.then(response => {
530-
ProcessMaker.alert('{{__('User Updated Successfully ')}}', 'success');
531-
this.onClose();
532-
})
533-
},
534548
loadTokens() {
535549
ProcessMaker.apiClient({
536550
method: 'GET',

0 commit comments

Comments
 (0)