alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
53 lines (47 loc) • 1.5 kB
text/typescript
import { Alepha } from "alepha";
import { describe, expect, it } from "vitest";
import { $permission, $role } from "../index.ts";
describe("$role", () => {
it("should accept permissions", async () => {
class Roles {
admin = $role({
name: "admin",
permissions: [
{
name: "*",
},
],
});
user = $role({
permissions: [
{
name: "*",
ownership: true,
exclude: ["admin:*"],
},
],
});
}
class Permissions {
readFiles = $permission({
group: "admin",
});
readFileById = $permission({
group: "files",
});
}
const alepha = Alepha.create();
const roles = alepha.inject(Roles);
const permissions = alepha.inject(Permissions);
await alepha.start();
expect(roles.admin.can(permissions.readFiles)).toBe(true);
expect(roles.admin.check(permissions.readFiles).ownership).toBe(false);
expect(roles.admin.check(permissions.readFileById).ownership).toBe(false);
expect(roles.admin.can(permissions.readFileById)).toBe(true);
expect(roles.user.can(permissions.readFileById)).toBe(true);
// Because "admin:*" is excluded from user role
expect(roles.user.can(permissions.readFiles)).toBe(false);
expect(roles.user.check(permissions.readFiles).ownership).toBe(undefined);
expect(roles.user.check(permissions.readFileById).ownership).toBe(true);
});
});