170 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
		
			Executable File
		
	
	
	
	
<template>
 | 
						|
    <stateful-details
 | 
						|
        name="per_user_folders_permissions_details"
 | 
						|
        v-on:toggle="onToggle"
 | 
						|
    >
 | 
						|
        <summary>{{ __("Per-user permissions") }}:</summary>
 | 
						|
 | 
						|
        <div class="body">
 | 
						|
            <form v-if="usersWithoutPermissions.length > 0">
 | 
						|
                <div class="input-group">
 | 
						|
                    <label for="addPermissionsForUser"
 | 
						|
                        >{{ __("Add explicit permissions for") }}:</label
 | 
						|
                    >
 | 
						|
                    <select
 | 
						|
                        v-model="addPermissionsForUser"
 | 
						|
                        id="addPermissionsForUser"
 | 
						|
                    >
 | 
						|
                        <option
 | 
						|
                            v-for="user in usersWithoutPermissions"
 | 
						|
                            v-bind:key="user.id"
 | 
						|
                            v-bind:value="user.id"
 | 
						|
                        >
 | 
						|
                            {{ user.name }}
 | 
						|
                        </option>
 | 
						|
                    </select>
 | 
						|
                </div>
 | 
						|
            </form>
 | 
						|
 | 
						|
            <div
 | 
						|
                class="list vertical spaced striped items-rounded compact"
 | 
						|
                v-for="user in users"
 | 
						|
                v-bind:key="user.id"
 | 
						|
            >
 | 
						|
                <div class="list-item">
 | 
						|
                    <div>
 | 
						|
                        {{ user.name }}
 | 
						|
                        <small class="feed-item-meta inline ml-2">{{
 | 
						|
                            user.email
 | 
						|
                        }}</small>
 | 
						|
                        <div class="flex items-center space-x-2 mt-2">
 | 
						|
                            <permission-box
 | 
						|
                                v-bind:text="__('Create folder')"
 | 
						|
                                ability="can_create_folder"
 | 
						|
                                v-bind:folder="folder"
 | 
						|
                                v-bind:user="user"
 | 
						|
                            ></permission-box>
 | 
						|
                            <permission-box
 | 
						|
                                v-bind:text="__('Update folder')"
 | 
						|
                                ability="can_update_folder"
 | 
						|
                                v-bind:folder="folder"
 | 
						|
                                v-bind:user="user"
 | 
						|
                            ></permission-box>
 | 
						|
                            <permission-box
 | 
						|
                                v-bind:text="__('Delete folder')"
 | 
						|
                                ability="can_delete_folder"
 | 
						|
                                v-bind:folder="folder"
 | 
						|
                                v-bind:user="user"
 | 
						|
                            ></permission-box>
 | 
						|
                            <permission-box
 | 
						|
                                v-bind:text="__('Create document')"
 | 
						|
                                ability="can_create_document"
 | 
						|
                                v-bind:folder="folder"
 | 
						|
                                v-bind:user="user"
 | 
						|
                            ></permission-box>
 | 
						|
                            <permission-box
 | 
						|
                                v-bind:text="__('Delete document')"
 | 
						|
                                ability="can_delete_document"
 | 
						|
                                v-bind:folder="folder"
 | 
						|
                                v-bind:user="user"
 | 
						|
                            ></permission-box>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    <div>
 | 
						|
                        <button
 | 
						|
                            class="info"
 | 
						|
                            v-on:click="onRemovePermissions(user)"
 | 
						|
                        >
 | 
						|
                            <svg fill="currentColor" width="16" height="16">
 | 
						|
                                <use v-bind:xlink:href="icon('cancel')" /></svg
 | 
						|
                            ><span>{{ __("Apply default permissions") }}</span>
 | 
						|
                        </button>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </stateful-details>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import PermissionBox from "./PermissionBox.vue";
 | 
						|
import StatefulDetails from "../StatefulDetails.vue";
 | 
						|
 | 
						|
export default {
 | 
						|
    components: { PermissionBox, StatefulDetails },
 | 
						|
    props: ["folder"],
 | 
						|
    data: function () {
 | 
						|
        return {
 | 
						|
            users: [],
 | 
						|
            usersWithoutPermissions: [],
 | 
						|
            addPermissionsForUser: null,
 | 
						|
        };
 | 
						|
    },
 | 
						|
    watch: {
 | 
						|
        folder: function (folder) {
 | 
						|
            this.loadPermissions();
 | 
						|
        },
 | 
						|
        addPermissionsForUser: function (userId) {
 | 
						|
            const self = this;
 | 
						|
 | 
						|
            if (userId) {
 | 
						|
                api.post(
 | 
						|
                    route("folder.set_permission", { folder: self.folder.id }),
 | 
						|
                    {
 | 
						|
                        user_id: userId,
 | 
						|
                    }
 | 
						|
                ).then(function (response) {
 | 
						|
                    self.users = response;
 | 
						|
                    self.addPermissionsForUser = null;
 | 
						|
 | 
						|
                    self.loadUsersWithoutPermissions();
 | 
						|
                });
 | 
						|
            }
 | 
						|
        },
 | 
						|
    },
 | 
						|
    methods: {
 | 
						|
        onToggle: function (evt) {
 | 
						|
            if (evt.target.open) {
 | 
						|
                this.loadPermissions();
 | 
						|
            }
 | 
						|
        },
 | 
						|
        loadPermissions: function () {
 | 
						|
            this.loadPerUserPermissions();
 | 
						|
            this.loadUsersWithoutPermissions();
 | 
						|
        },
 | 
						|
        loadPerUserPermissions: function () {
 | 
						|
            const self = this;
 | 
						|
 | 
						|
            api.get(route("folder.per_user_permissions", self.folder)).then(
 | 
						|
                function (response) {
 | 
						|
                    self.users = response;
 | 
						|
                }
 | 
						|
            );
 | 
						|
        },
 | 
						|
        loadUsersWithoutPermissions: function () {
 | 
						|
            const self = this;
 | 
						|
 | 
						|
            api.get(
 | 
						|
                route("folder.users_without_permissions", self.folder)
 | 
						|
            ).then(function (response) {
 | 
						|
                self.usersWithoutPermissions = response;
 | 
						|
            });
 | 
						|
        },
 | 
						|
 | 
						|
        onRemovePermissions: function (user) {
 | 
						|
            const self = this;
 | 
						|
 | 
						|
            api.delete(
 | 
						|
                route("folder.remove_permissions", {
 | 
						|
                    folder: self.folder.id,
 | 
						|
                    user: user.id,
 | 
						|
                })
 | 
						|
            ).then(function (response) {
 | 
						|
                self.users = response;
 | 
						|
 | 
						|
                self.loadUsersWithoutPermissions();
 | 
						|
            });
 | 
						|
        },
 | 
						|
    },
 | 
						|
};
 | 
						|
</script> |