Update Permissions class & docs

This commit is contained in:
venashial
2022-06-04 00:05:23 -07:00
parent 5b0aba99bb
commit 597c071c3d
2 changed files with 42 additions and 32 deletions

View File

@@ -1,38 +1,42 @@
export class Permissions { export class Permissions {
data = { uploadVersions = false
uploadVersions: false, deleteVersion = false
deleteVersion: false, editDetails = false
editDetails: false, editBody = false
editBody: false, manageInvites = false
manageInvites: false, removeMember = false
removeMember: false, editMember = false
editMember: false, deleteProject = false
deleteProject: false,
}
get settingsPage(): boolean { get settingsPage(): boolean {
return this.manageInvites || this.removeMember || this.editMember || this.deleteProject
}
toInteger(): number {
return ( return (
this.data.manageInvites || (this.uploadVersions ? 1 : 0) |
this.data.removeMember || (this.deleteVersion ? 1 << 1 : 0) |
this.data.editMember || (this.editDetails ? 1 << 2 : 0) |
this.data.deleteProject (this.editBody ? 1 << 3 : 0) |
(this.manageInvites ? 1 << 4 : 0) |
(this.removeMember ? 1 << 5 : 0) |
(this.editMember ? 1 << 6 : 0) |
(this.deleteProject ? 1 << 7 : 0)
) )
} }
constructor(from: number | 'ALL' | null) { constructor(from: number | 'ALL' | null) {
if (from === 'ALL' || from === 0b11111111 || from === null) { if (from === 'ALL' || from === 0b11111111 || from === null) {
Object.keys(this.data).forEach((v) => (this.data[v] = true)) Object.keys(this).forEach((v) => (this[v] = true))
} else if (typeof from === 'number') { } else if (typeof from === 'number') {
this.data = { this.uploadVersions = !!(from & (1 << 0))
uploadVersions: !!(from & (1 << 0)), this.deleteVersion = !!(from & (1 << 1))
deleteVersion: !!(from & (1 << 1)), this.editDetails = !!(from & (1 << 2))
editDetails: !!(from & (1 << 2)), this.editBody = !!(from & (1 << 3))
editBody: !!(from & (1 << 3)), this.manageInvites = !!(from & (1 << 4))
manageInvites: !!(from & (1 << 4)), this.removeMember = !!(from & (1 << 5))
removeMember: !!(from & (1 << 5)), this.editMember = !!(from & (1 << 6))
editMember: !!(from & (1 << 6)), this.deleteProject = !!(from & (1 << 7))
deleteProject: !!(from & (1 << 7)),
}
} }
} }
} }

View File

@@ -58,16 +58,22 @@ The `markdownInline` parser is perfect for translations and short bios. It doesn
The `Permissions` class provides an easy way to manage user permissions. The `Permissions` class provides an easy way to manage user permissions.
```ts ```svelte example raised
<script lang="ts">
import { Permissions } from 'omorphia/utils' import { Permissions } from 'omorphia/utils'
const adminLevel = new Permissions('ALL') const permissions = new Permissions(128) // Can be integer or 'ALL'
const memberLevel = new Permissions(member.permissions) /* `member` from API */ </script>
const userLevel = new Permissions(0)
if (memberLevel.data.uploadVersions) { <p>
console.log('Can upload versions!') <input type="checkbox" bind:checked={permissions.uploadVersions} id="ex-1"/>
} <label for="ex-1">Can edit versions</label><br>
<input type="checkbox" bind:checked={permissions.deleteProject} id="ex-2"/>
<label for="ex-2">Can delete project</label><br><br>
Integer: {permissions.toInteger()}<br>
Can access settings page: {permissions.settingsPage}
</p>
``` ```
## Versions ## Versions