mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
added extra items
This commit is contained in:
parent
0a59b1e91e
commit
a9c78db940
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}))
|
||||
|
7
packages/app/src/pages/insiders/index.jsx
Normal file
7
packages/app/src/pages/insiders/index.jsx
Normal file
@ -0,0 +1,7 @@
|
||||
import React from "react"
|
||||
|
||||
export default () => {
|
||||
return <div>
|
||||
<h1>Insider Tools</h1>
|
||||
</div>
|
||||
}
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user