added extra items

This commit is contained in:
SrGooglo 2023-08-20 03:09:31 +00:00
parent 0a59b1e91e
commit a9c78db940
4 changed files with 68 additions and 7 deletions

View File

@ -11,6 +11,16 @@ import sidebarItems from "schemas/sidebar"
import "./index.less"
const extraItems = [
{
id: "insiders",
title: "Insiders",
icon: "MdToken",
roles: ["insider"],
path: "/insiders",
}
]
const onClickHandlers = {
settings: () => {
window.app.navigation.goToSettings()
@ -35,9 +45,12 @@ const onClickHandlers = {
}
}
const generateTopItems = () => {
return sidebarItems.map((item) => {
const generateTopItems = (extra = []) => {
const items = [...sidebarItems, ...extra]
return items.map((item) => {
return {
id: item.id,
key: item.id,
icon: createIconRender(item.icon),
label: <Translation>
@ -208,6 +221,8 @@ export default class Sidebar extends React.Component {
}
componentDidMount = async () => {
this.computeExtraItems()
for (const [event, handler] of Object.entries(this.events)) {
app.eventBus.on(event, handler)
}
@ -229,6 +244,28 @@ export default class Sidebar extends React.Component {
//delete app.layout.sidebar
}
computeExtraItems = async () => {
const roles = await app.cores.permissions.getRoles()
const resultItems = []
if (roles.includes("admin")) {
resultItems.push(...extraItems)
} else {
extraItems.forEach((item) => {
item.roles.every((role) => {
if (roles.includes(role)) {
resultItems.push(item)
}
})
})
}
this.setState({
topItems: generateTopItems(resultItems)
})
}
handleClick = (e) => {
if (e.item.props.ignoreClick) {
return
@ -249,7 +286,7 @@ export default class Sidebar extends React.Component {
window.app.cores.sound.useUIAudio("sidebar.switch_tab")
const item = sidebarItems.find((item) => item.id === e.key)
const item = this.state.topItems.find((item) => item.id === e.key)
return window.app.location.push(`/${item.path ?? e.key}`, 150)
}

View File

@ -5,24 +5,37 @@ import SessionModel from "models/session"
export default class PermissionsCore extends Core {
static namespace = "permissions"
static dependencies = ["api"]
public = {
getRoles: this.getRoles,
hasAdmin: this.hasAdmin,
checkUserIdIsSelf: this.checkUserIdIsSelf,
hasPermission: this.hasPermission,
}
async hasAdmin() {
return await UserModel.hasAdmin()
return await UserModel.haveAdmin()
}
checkUserIdIsSelf(user_id) {
return SessionModel.user_id === user_id
}
async hasPermission(permission) {
async getRoles() {
return await UserModel.selfRoles()
}
async hasPermission(permission, adminPreference = false) {
if (adminPreference) {
const admin = await this.hasAdmin()
if (admin) {
return true
}
}
let query = []
if (Array.isArray(permission)) {
@ -33,7 +46,7 @@ export default class PermissionsCore extends Core {
// create a promise and check if the user has all the permission in the query
const result = await Promise.all(query.map(async (permission) => {
const hasPermission = await UserModel.hasRole(permission)
const hasPermission = await UserModel.haveRole(permission)
return hasPermission
}))

View File

@ -0,0 +1,7 @@
import React from "react"
export default () => {
return <div>
<h1>Insider Tools</h1>
</div>
}

View File

@ -13,6 +13,10 @@ export default class Session {
return Storage.engine.set(this.storageTokenKey, token)
}
static get roles() {
return this.getDecodedToken()?.roles
}
static get user_id() {
return this.getDecodedToken()?.user_id
}