Adding test case for multi-inheritance
This commit is contained in:
parent
676cb3f92e
commit
26ee50b10b
|
@ -1,5 +1,5 @@
|
||||||
import { roles } from "@budibase/backend-core"
|
import { roles } from "@budibase/backend-core"
|
||||||
import { Document, PermissionLevel, Row } from "@budibase/types"
|
import { Document, PermissionLevel, Role, Row, Table } from "@budibase/types"
|
||||||
import * as setup from "./utilities"
|
import * as setup from "./utilities"
|
||||||
import { generator, mocks } from "@budibase/backend-core/tests"
|
import { generator, mocks } from "@budibase/backend-core/tests"
|
||||||
|
|
||||||
|
@ -288,6 +288,86 @@ describe("/permission", () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("multi-inheritance permissions", () => {
|
||||||
|
let table1: Table, table2: Table, role1: Role, role2: Role
|
||||||
|
beforeEach(async () => {
|
||||||
|
table1 = await config.createTable()
|
||||||
|
table2 = await config.createTable()
|
||||||
|
await config.api.row.save(table1._id!, {
|
||||||
|
name: "a",
|
||||||
|
})
|
||||||
|
await config.api.row.save(table2._id!, {
|
||||||
|
name: "b",
|
||||||
|
})
|
||||||
|
role1 = await config.api.roles.save(
|
||||||
|
{
|
||||||
|
name: "role1",
|
||||||
|
permissionId: PermissionLevel.WRITE,
|
||||||
|
inherits: BUILTIN_ROLE_IDS.BASIC,
|
||||||
|
},
|
||||||
|
{ status: 200 }
|
||||||
|
)
|
||||||
|
role2 = await config.api.roles.save(
|
||||||
|
{
|
||||||
|
name: "role2",
|
||||||
|
permissionId: PermissionLevel.WRITE,
|
||||||
|
inherits: BUILTIN_ROLE_IDS.BASIC,
|
||||||
|
},
|
||||||
|
{ status: 200 }
|
||||||
|
)
|
||||||
|
await config.api.permission.add({
|
||||||
|
roleId: role1._id!,
|
||||||
|
level: PermissionLevel.READ,
|
||||||
|
resourceId: table1._id!,
|
||||||
|
})
|
||||||
|
await config.api.permission.add({
|
||||||
|
roleId: role2._id!,
|
||||||
|
level: PermissionLevel.READ,
|
||||||
|
resourceId: table2._id!,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should be unable to search for table 2 using role 1", async () => {
|
||||||
|
await config.setRole(role1._id!, async () => {
|
||||||
|
const response2 = await config.api.row.search(
|
||||||
|
table2._id!,
|
||||||
|
{
|
||||||
|
query: {},
|
||||||
|
},
|
||||||
|
{ status: 403 }
|
||||||
|
)
|
||||||
|
expect(response2.rows).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should be able to fetch two tables, with different roles, using multi-inheritance", async () => {
|
||||||
|
const role3 = await config.api.roles.save({
|
||||||
|
name: "role3",
|
||||||
|
permissionId: PermissionLevel.WRITE,
|
||||||
|
inherits: [role1._id!, role2._id!],
|
||||||
|
})
|
||||||
|
|
||||||
|
await config.setRole(role3._id!, async () => {
|
||||||
|
const response1 = await config.api.row.search(
|
||||||
|
table1._id!,
|
||||||
|
{
|
||||||
|
query: {},
|
||||||
|
},
|
||||||
|
{ status: 200 }
|
||||||
|
)
|
||||||
|
const response2 = await config.api.row.search(
|
||||||
|
table2._id!,
|
||||||
|
{
|
||||||
|
query: {},
|
||||||
|
},
|
||||||
|
{ status: 200 }
|
||||||
|
)
|
||||||
|
expect(response1.rows[0].name).toEqual("a")
|
||||||
|
expect(response2.rows[0].name).toEqual("b")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("fetch builtins", () => {
|
describe("fetch builtins", () => {
|
||||||
it("should be able to fetch builtin definitions", async () => {
|
it("should be able to fetch builtin definitions", async () => {
|
||||||
const res = await request
|
const res = await request
|
||||||
|
|
|
@ -428,6 +428,34 @@ export default class TestConfiguration {
|
||||||
|
|
||||||
// HEADERS
|
// HEADERS
|
||||||
|
|
||||||
|
// sets the role for the headers, for the period of a callback
|
||||||
|
async setRole(roleId: string, cb: () => Promise<unknown>) {
|
||||||
|
const roleUser = await this.createUser({
|
||||||
|
roles: {
|
||||||
|
[this.prodAppId!]: roleId,
|
||||||
|
},
|
||||||
|
builder: { global: false },
|
||||||
|
admin: { global: false },
|
||||||
|
})
|
||||||
|
await this.login({
|
||||||
|
roleId,
|
||||||
|
userId: roleUser._id!,
|
||||||
|
builder: false,
|
||||||
|
prodApp: true,
|
||||||
|
})
|
||||||
|
const temp = this.user
|
||||||
|
this.user = roleUser
|
||||||
|
await cb()
|
||||||
|
if (temp) {
|
||||||
|
this.user = temp
|
||||||
|
await this.login({
|
||||||
|
userId: temp._id!,
|
||||||
|
builder: true,
|
||||||
|
prodApp: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultHeaders(extras = {}, prodApp = false) {
|
defaultHeaders(extras = {}, prodApp = false) {
|
||||||
const tenantId = this.getTenantId()
|
const tenantId = this.getTenantId()
|
||||||
const user = this.getUser()
|
const user = this.getUser()
|
||||||
|
|
Loading…
Reference in New Issue