Account for JS current user bindings as well as HBS
This commit is contained in:
parent
62e47cc268
commit
dc10bbf4c7
|
@ -11,6 +11,11 @@ import { GridSocketEvent } from "@budibase/shared-core"
|
||||||
import { userAgent } from "koa-useragent"
|
import { userAgent } from "koa-useragent"
|
||||||
import { createContext, runMiddlewares } from "./middleware"
|
import { createContext, runMiddlewares } from "./middleware"
|
||||||
import sdk from "../sdk"
|
import sdk from "../sdk"
|
||||||
|
import {
|
||||||
|
findHBSBlocks,
|
||||||
|
isJSBinding,
|
||||||
|
decodeJSBinding,
|
||||||
|
} from "@budibase/string-templates"
|
||||||
|
|
||||||
const { PermissionType, PermissionLevel } = permissions
|
const { PermissionType, PermissionLevel } = permissions
|
||||||
|
|
||||||
|
@ -19,6 +24,20 @@ export default class GridSocket extends BaseSocket {
|
||||||
super(app, server, "/socket/grid")
|
super(app, server, "/socket/grid")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checks if a view's query contains any current user bindings
|
||||||
|
containsCurrentUserBinding(view: ViewV2): boolean {
|
||||||
|
return findHBSBlocks(JSON.stringify(view.query))
|
||||||
|
.map(binding => {
|
||||||
|
const sanitizedBinding = binding.replace(/\\"/g, '"')
|
||||||
|
if (isJSBinding(sanitizedBinding)) {
|
||||||
|
return decodeJSBinding(sanitizedBinding)
|
||||||
|
} else {
|
||||||
|
return sanitizedBinding
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.some(binding => binding?.includes("[user]"))
|
||||||
|
}
|
||||||
|
|
||||||
async onConnect(socket: Socket) {
|
async onConnect(socket: Socket) {
|
||||||
// Initial identification of connected spreadsheet
|
// Initial identification of connected spreadsheet
|
||||||
socket.on(GridSocketEvent.SelectDatasource, async (payload, callback) => {
|
socket.on(GridSocketEvent.SelectDatasource, async (payload, callback) => {
|
||||||
|
@ -36,7 +55,7 @@ export default class GridSocket extends BaseSocket {
|
||||||
try {
|
try {
|
||||||
await context.doInAppContext(appId, async () => {
|
await context.doInAppContext(appId, async () => {
|
||||||
const view = await sdk.views.get(ds.id)
|
const view = await sdk.views.get(ds.id)
|
||||||
if (JSON.stringify(view.query).includes("[user]")) {
|
if (this.containsCurrentUserBinding(view)) {
|
||||||
valid = false
|
valid = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue