/* Feature permissions */
const FeaturePermissions = createPermissions({
schema: {
max_agents: z.number().min(1),
features: z.enum(["premium_editor", "ai_tools", "phone_support"]).array(),
products: z.enum(["view", "create", "update", "delete"]).array(),
},
});
/* Access permissions */
const AccessPermissions = createPermissions({
schema: {
settings: z.enum(["view", "create", "update", "delete"]).array(),
members: z.enum(["view", "create", "update", "delete"]).array(),
billing: z.enum(["view", "create", "update", "delete"]).array(),
},
});
/* Example user permissions. Could from from a database or API */
const exampleUserPermissions = {
max_agents: 2,
features: ["ai_tools", "premium_editor", "martial"],
products: ["view", "create", "delete"],
} as any;
/* Example user access permissions. Could from from a database or API */
const exampleUserAccessPermissions = {
members: ["view"],
billing: ["view", "update"],
} as any;
export default function MultiplePermissionsPage() {
const result = FeaturePermissions.validate(exampleUserPermissions, {
max_agents: (value) => value >= 3,
products: (value) => value.containsAll(["create"]),
features: (value) => value.containsAll(["phone_support"]),
});
/* {
"max_agents": {
"valid": false,
"message": "max_agents is invalid"
},
"products": {
"valid": true,
"message": "products is valid"
},
"features": {
"valid": false,
"message": "features is invalid"
}} */
const accessResult = AccessPermissions.validate(exampleUserAccessPermissions, {
members: (value) => value.containsAll(["view"]),
billing: (value) => value.containsAll(["delete"]),
});
/* {
"members": {
"valid": true,
"message": "members is valid"
},
"billing": {
"valid": false,
"message": "billing is invalid"
}} */