UNPKG

globular_admin

Version:
955 lines (823 loc) 38.5 kB
import { Panel } from "./panel"; import { eventHub, getErrorMessage, getRessourcePermissions, GetAllAccountsInfo, setRessourcePermission, OwnerType, getAllRoles, GetAllApplicationsInfo, deleteRessourcePermissions, getRessourceOwners, setRessourceOwners, deleteRessourceOwners } from "./backend"; import { randomUUID } from "./utility"; import { RessourcePermission } from "globular-web-client/lib/ressource/ressource_pb"; /** * Control permission. */ export class PermissionExplorer extends Panel { // The file information. private ressourceInfo: any; private editable: boolean; private _content: any; public get content(): any { return this._content; } public set content(value: any) { this._content = value; } private _usersPermissionSection: any; public get usersPermissionSection(): any { return this._usersPermissionSection; } public set usersPermissionSection(value: any) { this._usersPermissionSection = value; } private _applciationsPermissionSection: any; public get applciationsPermissionSection(): any { return this._applciationsPermissionSection; } public set applciationsPermissionSection(value: any) { this._applciationsPermissionSection = value; } private _rolesPermissionSection: any; public get rolesPermissionSection(): any { return this._rolesPermissionSection; } public set rolesPermissionSection(value: any) { this._rolesPermissionSection = value; } private owners: Array<string> private path: string; // values localy... private accounts: any; private roles: any; private permissions: any; // contain the list of permission. private applications: any; // Contain the list of application constructor(id: string, parent?: any) { super(id); if (parent != undefined) { parent.appendElement(this.div); } this.div.element.className = "card col s12 /*m10 offset-m1*/"; this.div.element.style.display = "none" this.accounts = {} this.roles = {} this.applications = {} this.owners = new Array<string>() // Initilalyse roles getAllRoles((roles: any) => { for (var i = 0; i < roles.length; i++) { this.roles[roles[i]._id] = roles[i] } }, () => { }) GetAllApplicationsInfo((applications: any) => { for (var i = 0; i < applications.length; i++) { this.applications[applications[i]._id] = applications[i] } }, () => { }) // Initilalyse accounts GetAllAccountsInfo((accounts: any) => { for (var i = 0; i < accounts.length; i++) { this.accounts[accounts[i]._id] = accounts[i] } } , () => { }) // event to react to. eventHub.subscribe( "set_ressource_event", (uuid: string) => { }, (evt: any) => { if(evt.id != this.id){ return } // Set the dir to display. // Here I must retreive the directory from the given path. getRessourcePermissions(evt.ressource.path, (permissions: Array<RessourcePermission>) => { this.path = evt.ressource.path; this.permissions = permissions; this.setRessource(evt.ressource); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) }, true ); eventHub.subscribe( "set_file_event", (uuid: string) => { }, (evt: any) => { if(evt.id != this.id){ return } // Set the dir to display. // Here I must retreive the directory from the given path. getRessourcePermissions(evt.file.path, (permissions: Array<RessourcePermission>) => { this.path = evt.file.path; this.permissions = permissions; this.setRessource(evt.file); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) }, true ); } // Set the file or the directory. setRessource(ressourceInfo: any, callback?: () => void) { if (ressourceInfo == undefined) { this.div.element.style.display = "none" this.div.element.innerHTML = "" return } if (ressourceInfo.name == "webroot") { this.div.element.style.display = "none" this.div.element.innerHTML = "" return } this.ressourceInfo = ressourceInfo; this.div.element.style.display = "" this.div.element.innerHTML = "" // The name of the file. this.content = this.div.appendElement({ tag: "div", class: "row" }).down() .appendElement({ tag: "div", class: "card-content" }).down() .appendElement({ tag: "span", id: "card-title", "style": "font-size: medium; font-weight: inherit;", innerHtml: ressourceInfo.name, class: "card-title" }) .appendElement({ tag: "div" }).down() // Now I will get the permission for the file/folder... and diplay it. // Here I must retreive the directory from the given path. getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; // I will set the owner information here. getRessourceOwners(this.ressourceInfo.path, (owners: Array<string>) => { this.owners = owners; this.displayPermissions() }, () => { this.owners = new Array<string>() this.displayPermissions() if (callback != undefined) { callback(); // the ressource is now set. } }) }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } // Display the list of owners. displayOwner(content: any, owner: any) { let div = content.appendElement({ tag: "div" }).down() if (!this.editable) { // Here I will set icons... let div_ = div.appendElement({ tag: "div", class: "col s12", style: "display: flex; margin-bottom: 5px;", innerHtml: owner.name }).down() div_.element.onmouseenter = function () { this.style.backgroundColor = "#fafafa" } div_.element.onmouseleave = function () { this.style.backgroundColor = "" } } else { let div_ = div.appendElement({ tag: "div", class: "col s11", style: "display: flex; margin-bottom: 5px;", innerHtml: owner.name }).down() let deleteBtn = div.appendElement({ tag: "i", class: "tiny material-icons col s1", innerHtml: "remove" }).down() div_.element.onmouseenter = function () { this.style.backgroundColor = "#fafafa" } div_.element.onmouseleave = function () { this.style.backgroundColor = "" } deleteBtn.element.onmouseenter = () => { div_.element.style.backgroundColor = "#fafafa" deleteBtn.element.style.backgroundColor = "#fafafa" deleteBtn.element.style.cursor = "pointer" } deleteBtn.element.onmouseleave = () => { div_.element.style.backgroundColor = "" deleteBtn.element.style.backgroundColor = "" deleteBtn.element.style.cursor = "default" } deleteBtn.element.onclick = () => { // Delete the display. deleteRessourceOwners(this.path, owner._id, () => { this.owners.splice(this.owners.indexOf(owner._id), 1) div.delete(); this.displayPermissions() }, (err: any) => { M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } } } // Display ressource permission displayPermission(content: any, permission: any, owner: any, ownerType: OwnerType) { let div = content.appendElement({ tag: "div" }).down() let ownerName = "" if (ownerType == OwnerType.Application) { ownerName = owner._id } else { ownerName = owner.name } let permissionDiv = div .appendElement({ tag: "div", id: "permission_div_0", class: "col s12 m8", style: "display: flex; margin-bottom: 5px;" }).down() .appendElement({ tag: "span", innerHtml: ownerName }) .appendElement({ tag: "span", innerHtml: permission.path, style: "flex-grow: 1; margin-left: 15px;" }).up() .appendElement({ tag: "div", id: "permission_div_1", class: "col s12 m4", style: "display: flex; margin-bottom: 5px;" }).down() // Now the permission itself. // Mouse over to make reading little easier. div.getChildById("permission_div_0").element.onmouseenter = div.getChildById("permission_div_1").element.onmouseenter = () => { div.getChildById("permission_div_0").element.style.backgroundColor = "#fafafa" div.getChildById("permission_div_1").element.style.backgroundColor = "#fafafa" } div.getChildById("permission_div_0").element.onmouseleave = div.getChildById("permission_div_1").element.onmouseleave = () => { div.getChildById("permission_div_0").element.style.backgroundColor = "" div.getChildById("permission_div_1").element.style.backgroundColor = "" } // Create the permission panel. new PermissionPanel(randomUUID(), permissionDiv, permission.number, (permission_number: number) => { setRessourcePermission(permission.path, owner._id, ownerType, permission_number, () => { getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; this.displayPermissions() }, (err: any) => { M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) M.toast({ html: "File permission was saved!", displayLength: 2000 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) }, () => { deleteRessourcePermissions(permission.path, owner._id, () => { getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; this.displayPermissions() }, (err: any) => { M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) M.toast({ html: "File permission was deleted!", displayLength: 2000 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) }, this.editable) } // Display file permissions displayPermissions() { this.content.removeAllChilds() let ownersPermissionSection = this.content.appendElement({ tag: "div", class: "row" }).down() let ownersPermissionRow = ownersPermissionSection.appendElement({ tag: "h6", innerHtml: "Owner(s)", class: "col s12", style: "padding-bottom: 15px;" }).down() .appendElement({ tag: "div", class: "row", style: "margin-bottom: 0px;" }).down() // Here I will create the tree section where the permission can belong to. this.usersPermissionSection = this.content.appendElement({ tag: "div", class: "row" }).down() let inputUserRow = this.usersPermissionSection.appendElement({ tag: "h6", innerHtml: "User(s) Permission", class: "col s12", style: "padding-bottom: 15px;" }).down() .appendElement({ tag: "div", class: "row", style: "margin-bottom: 0px;" }).down() if (this.editable == true) { // here I will append the list of all account... GetAllAccountsInfo((accounts: Array<any>) => { // The user permission input. let user_input = inputUserRow .appendElement({ tag: "div", class: "input-field col s4" }) .down() .appendElement({ tag: "input", class: "autocomplete", placeholder: "Append User Permission", id: randomUUID() }) .down(); let data_0: any data_0 = {} // Now I will take the data if (this.permissions != undefined) { // Here If the user already have a permission for that file I will not append it into the list. for (var i = 0; i < accounts.length; i++) { let exist = false; for (var j = 0; j < this.permissions.length; j++) { let permission = this.permissions[j] if (permission.user.length != null) { if (permission.user == accounts[i]._id) { exist = true; break; } } } // append the account if it not already exist. if (!exist) { data_0[accounts[i].name] = null; this.accounts[accounts[i].name] = accounts[i] } } } else { // Append all the account in that case. for (var i = 0; i < accounts.length; i++) { data_0[accounts[i].name] = null; this.accounts[accounts[i].name] = accounts[i] } } // on auto complete. let onAutocomplete_0 = () => { // create new permission for user let username = user_input.element.value; setRessourcePermission(this.ressourceInfo.path, this.accounts[username]._id, OwnerType.User, 0, () => { // New permission was created... getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; this.displayPermissions() }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) M.toast({ html: "New permission was created!", displayLength: 2000 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } M.Autocomplete.init(document.getElementById(user_input.element.id), { data: data_0, onAutocomplete: onAutocomplete_0 }); // The owner input. let owner_input = ownersPermissionRow .appendElement({ tag: "div", class: "input-field col s4" }) .down() .appendElement({ tag: "input", class: "autocomplete", placeholder: "Append User Permission", id: randomUUID() }) .down(); let data_1: any data_1 = {} // Here If the user already have a permission for that file I will not append it into the list. for (var i = 0; i < accounts.length; i++) { let exist = false; for (var j = 0; j < this.owners.length; j++) { if (this.owners[j] == accounts[i]._id) { exist = true; break; } } // append the account if it not already exist. if (!exist) { data_1[accounts[i].name] = null; } } // Set the owner... let onAutocomplete_1 = () => { // create new permission for user let username = owner_input.element.value; setRessourceOwners(this.path, this.accounts[username]._id, () => { // simply redraw the whole thing. this.owners.push(this.accounts[username]._id) this.displayPermissions() }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } M.Autocomplete.init(document.getElementById(owner_input.element.id), { data: data_1, onAutocomplete: onAutocomplete_1 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } this.rolesPermissionSection = this.content.appendElement({ tag: "div", class: "row", style: "padding: 0px" }).down() let inputRoleRow = this.rolesPermissionSection.appendElement({ tag: "h6", innerHtml: "Role(s) Permission", class: "col s12", style: "padding-bottom: 15px;" }).down() .appendElement({ tag: "div", class: "row", style: "margin-bottom: 0px;" }).down() if (this.editable == true) { // here I will append the list of all account... getAllRoles((roles: Array<any>) => { let role_input = inputRoleRow .appendElement({ tag: "div", class: "input-field col s4" }) .down() .appendElement({ tag: "input", class: "autocomplete", placeholder: "Append Role Permission", id:randomUUID() }) .down(); let data: any data = {} // Now I will take the data if (this.permissions != undefined) { // Here If the user already have a permission for that file I will not append it into the list. for (var i = 0; i < roles.length; i++) { let exist = false; for (var j = 0; j < this.permissions.length; j++) { let permission = this.permissions[j] if (permission.role.length != null) { if (permission.role == roles[i]._id) { exist = true; break; } } } // append the account if it not already exist. if (!exist) { data[roles[i].name] = null; this.roles[roles[i].name] = roles[i] } } } else { // Append all the account in that case. for (var i = 0; i < roles.length; i++) { data[roles[i].name] = null; this.roles[roles[i].name] = roles[i] } } // on auto complete. let onAutocomplete = () => { // create new permission for user let rolename = role_input.element.value; setRessourcePermission(this.ressourceInfo.path, this.roles[rolename]._id, OwnerType.Role, 0, () => { // New permission was created... getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; this.displayPermissions() }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) M.toast({ html: "New permission was created!", displayLength: 2000 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } M.Autocomplete.init(document.getElementById(role_input.element.id), { data: data, onAutocomplete: onAutocomplete }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } this.applciationsPermissionSection = this.content.appendElement({ tag: "div", class: "row", style: "padding: 0px" }).down() let inputApplicationRow = this.applciationsPermissionSection.appendElement({ tag: "h6", innerHtml: "Application(s) Permission", class: "col s12", style: "padding-bottom: 15px;" }).down() .appendElement({ tag: "div", class: "row", style: "margin-bottom: 0px;" }).down() if (this.editable == true) { // here I will append the list of all account... GetAllApplicationsInfo((applications: Array<any>) => { let application_input = inputApplicationRow .appendElement({ tag: "div", class: "input-field col s4" }) .down() .appendElement({ tag: "input", class: "autocomplete", placeholder: "Append Application Permission", id: randomUUID() }) .down(); let data: any data = {} // Now I will take the data if (this.permissions != undefined) { // Here If the user already have a permission for that file I will not append it into the list. for (var i = 0; i < applications.length; i++) { let exist = false; for (var j = 0; j < this.permissions.length; j++) { let permission = this.permissions[j] if (permission.application.length != null) { if (permission.application == applications[i]._id) { exist = true; break; } } } // append the application if it not already exist. if (!exist) { data[applications[i]._id] = null; } } } else { // Append all the application in that case. for (var i = 0; i < applications.length; i++) { data[applications[i]._id] = null; } } // on auto complete. let onAutocomplete = () => { // create new permission for user let applicationName = application_input.element.value; setRessourcePermission(this.ressourceInfo.path, applicationName, OwnerType.Application, 0, () => { // New permission was created... getRessourcePermissions(this.ressourceInfo.path, (permissions: Array<RessourcePermission>) => { this.path = this.ressourceInfo.path; this.permissions = permissions; this.displayPermissions() }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) M.toast({ html: "New permission was created!", displayLength: 2000 }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } M.Autocomplete.init(document.getElementById(application_input.element.id), { data: data, onAutocomplete: onAutocomplete }); }, (err: any) => { console.log(err) M.toast({ html: getErrorMessage(err.message), displayLength: 2000 }); }) } // display the permission in the section... let userPermission = new Array<any>(); let rolePermission = new Array<any>(); let applicationPermission = new Array<any>(); for (var i = 0; i < this.permissions.length; i++) { if (this.permissions[i].user.length != 0) { userPermission.push(this.permissions[i]) } else if (this.permissions[i].role.length != 0) { rolePermission.push(this.permissions[i]) } else if (this.permissions[i].application.length != 0) { applicationPermission.push(this.permissions[i]) } } // sort the list of user. this.owners.sort((a: any, b: any) => (a > b) ? 1 : ((b > a) ? -1 : 0)); for (var i = 0; i < this.owners.length; i++) { this.displayOwner(ownersPermissionSection, this.accounts[this.owners[i]]) } userPermission.sort((a: any, b: any) => (a.user > b.user) ? 1 : ((b.user > a.user) ? -1 : 0)); for (var i = 0; i < userPermission.length; i++) { this.displayPermission(this.usersPermissionSection, userPermission[i], this.accounts[userPermission[i].user], OwnerType.User) } rolePermission.sort((a: any, b: any) => (a.role > b.role) ? 1 : ((b.role > a.role) ? -1 : 0)); for (var i = 0; i < rolePermission.length; i++) { this.displayPermission(this.rolesPermissionSection, rolePermission[i], this.roles[rolePermission[i].role], OwnerType.Role) } applicationPermission.sort((a: any, b: any) => (a.application > b.application) ? 1 : ((b.application > a.application) ? -1 : 0)); for (var i = 0; i < applicationPermission.length; i++) { this.displayPermission(this.applciationsPermissionSection, applicationPermission[i], this.applications[applicationPermission[i].application], OwnerType.Application) } } // Here I will react to login information... onlogin(data: any) { // overide... this.editable = true; this.setRessource(this.ressourceInfo) } onlogout() { // overide... this.editable = false; this.setRessource(this.ressourceInfo) } } /** * Display one permission. */ export class PermissionPanel extends Panel { private editable: boolean; constructor(id: string, public permissionDiv: any, public permission: number, public onSetPermission: (permission: number) => void, public onDeletePermission: () => void, editable: boolean) { super(id); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// this.editable = editable; this.setPermission() } // Here I will react to login information... onlogin(data: any) { // overide... this.editable = true; this.setPermission() } onlogout() { // overide... this.editable = false; this.setPermission() } setPermission() { // Clear the div. this.permissionDiv.removeAllChilds() let permissionReadDiv = this.permissionDiv.appendElement({ tag: "div", style: "flex-grow: 1; display: flex; align-items: center" }).down() permissionReadDiv.appendElement({ tag: "span", innerHtml: "read", style: "margin-right: 15px; margin-left: 5px;" }) if (!this.editable) { // Here I will set icons... permissionReadDiv.appendElement({ tag: "i", id: "read_deny_ico", class: "tiny material-icons", innerHtml: "clear" }) .appendElement({ tag: "i", id: "read_allow_ico", class: "tiny material-icons", innerHtml: "check" }) } else { // Here I will set checkbox. permissionReadDiv.appendElement({ tag: "label" }).down() .appendElement({ tag: "input", id: "read_checkbox", class: "filled-in", type: "checkbox" }) .appendElement({ tag: "span" }) } let permissionWriteDiv = this.permissionDiv.appendElement({ tag: "div", style: "flex-grow: 1; display: flex; align-items: center" }).down() permissionWriteDiv.appendElement({ tag: "span", innerHtml: "write", style: "margin-right: 15px; margin-left: 5px;" }) if (!this.editable) { // Here I will set icons... permissionWriteDiv.appendElement({ tag: "i", id: "write_deny_ico", class: "tiny material-icons", innerHtml: "clear" }) .appendElement({ tag: "i", id: "write_allow_ico", class: "tiny material-icons", innerHtml: "check" }) } else { // Here I will set checkbox. permissionWriteDiv.appendElement({ tag: "label" }).down() .appendElement({ tag: "input", id: "write_checkbox", class: "filled-in", type: "checkbox" }) .appendElement({ tag: "span" }) } let permissionDeleteDiv = this.permissionDiv.appendElement({ tag: "div", style: "flex-grow: 1; display: flex; align-items: center" }).down() permissionDeleteDiv.appendElement({ tag: "span", innerHtml: "delete", style: "margin-right: 15px; margin-left: 5px;" }) if (!this.editable) { // Here I will set icons... permissionDeleteDiv.appendElement({ tag: "i", id: "delete_deny_ico", class: "tiny material-icons", innerHtml: "clear" }) .appendElement({ tag: "i", id: "delete_allow_ico", class: "tiny material-icons", innerHtml: "check" }) } else { // Here I will set checkbox. permissionDeleteDiv.appendElement({ tag: "label" }).down() .appendElement({ tag: "input", id: "delete_checkbox", class: "filled-in", type: "checkbox" }) .appendElement({ tag: "span" }) } // Now depending of the permission number I will set the permission. if (this.permission == 0) { // No permission. if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = false this.permissionDiv.getChildById("write_checkbox").element.checked = false this.permissionDiv.getChildById("delete_checkbox").element.checked = false } } else if (this.permission == 1) { // delete if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "none" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = false this.permissionDiv.getChildById("write_checkbox").element.checked = false this.permissionDiv.getChildById("delete_checkbox").element.checked = true } } else if (this.permission == 2) { // write if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = false this.permissionDiv.getChildById("write_checkbox").element.checked = true this.permissionDiv.getChildById("delete_checkbox").element.checked = false } } else if (this.permission == 3) { // delete + Write. if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "none" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = false this.permissionDiv.getChildById("write_checkbox").element.checked = true this.permissionDiv.getChildById("delete_checkbox").element.checked = true } } else if (this.permission == 4) { // Read if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = true this.permissionDiv.getChildById("write_checkbox").element.checked = false this.permissionDiv.getChildById("delete_checkbox").element.checked = false } } else if (this.permission == 5) { // Read + delete if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "none" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = true this.permissionDiv.getChildById("write_checkbox").element.checked = false this.permissionDiv.getChildById("delete_checkbox").element.checked = true } } else if (this.permission == 6) { // Read + Write if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "none" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = true this.permissionDiv.getChildById("write_checkbox").element.checked = true this.permissionDiv.getChildById("delete_checkbox").element.checked = false } } else if (this.permission == 7) { // Read + Write + delete if (!this.editable) { this.permissionDiv.getChildById("read_allow_ico").element.style.display = "" this.permissionDiv.getChildById("write_allow_ico").element.style.display = "" this.permissionDiv.getChildById("delete_allow_ico").element.style.display = "" this.permissionDiv.getChildById("read_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("write_deny_ico").element.style.display = "none" this.permissionDiv.getChildById("delete_deny_ico").element.style.display = "none" } else { this.permissionDiv.getChildById("read_checkbox").element.checked = true this.permissionDiv.getChildById("write_checkbox").element.checked = true this.permissionDiv.getChildById("delete_checkbox").element.checked = true } } if (this.editable) { this.permissionDiv.getChildById("read_checkbox").element.onchange = this.permissionDiv.getChildById("delete_checkbox").element.onchange = this.permissionDiv.getChildById("write_checkbox").element.onchange = () => { let isRead = this.permissionDiv.getChildById("read_checkbox").element.checked let isWrite = this.permissionDiv.getChildById("write_checkbox").element.checked let isDelete = this.permissionDiv.getChildById("delete_checkbox").element.checked let permission_number: number if (!isRead && !isWrite && !isDelete) { permission_number = 0 } else if (!isRead && !isWrite && isDelete) { permission_number = 1 } else if (!isRead && isWrite && !isDelete) { permission_number = 2 } else if (!isRead && isWrite && isDelete) { permission_number = 3 } else if (isRead && !isWrite && !isDelete) { permission_number = 4 } else if (isRead && !isWrite && isDelete) { permission_number = 5 } else if (isRead && isWrite && !isDelete) { permission_number = 6 } else if (isRead && isWrite && isDelete) { permission_number = 7 } // Set the permission. this.onSetPermission(permission_number) } // Here I will also append the remove button. let removePermissionBtn = this.permissionDiv.appendElement({ tag: "i", class: "Small material-icons col s1", innerHtml: "delete" }).down() removePermissionBtn.element.onmouseenter = function () { this.style.cursor = "pointer" } removePermissionBtn.element.onmouseleave = function () { this.style.cursor = "default" } // remove the file permission. removePermissionBtn.element.onclick = () => { this.onDeletePermission(); } } } }