canUserAccessResource.ts 1012 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import db from "@server/db";
  2. import { and, eq } from "drizzle-orm";
  3. import { roleResources, userResources } from "@server/db/schema";
  4. export async function canUserAccessResource({
  5. userId,
  6. resourceId,
  7. roleId
  8. }: {
  9. userId: string;
  10. resourceId: number;
  11. roleId: number;
  12. }): Promise<boolean> {
  13. const roleResourceAccess = await db
  14. .select()
  15. .from(roleResources)
  16. .where(
  17. and(
  18. eq(roleResources.resourceId, resourceId),
  19. eq(roleResources.roleId, roleId)
  20. )
  21. )
  22. .limit(1);
  23. if (roleResourceAccess.length > 0) {
  24. return true;
  25. }
  26. const userResourceAccess = await db
  27. .select()
  28. .from(userResources)
  29. .where(
  30. and(
  31. eq(userResources.userId, userId),
  32. eq(userResources.resourceId, resourceId)
  33. )
  34. )
  35. .limit(1);
  36. if (userResourceAccess.length > 0) {
  37. return true;
  38. }
  39. return false;
  40. }