import { db } from "@/db"; import { user } from "@/db/schema"; import { eq } from "drizzle-orm"; export type UserRole = "user" | "admin" | "moderator"; // Permission tanımları export const PERMISSIONS = { // Image permissions IMAGE_UPLOAD: "image:upload", IMAGE_DELETE_OWN: "image:delete:own", IMAGE_DELETE_ANY: "image:delete:any", IMAGE_VIEW_OWN: "image:view:own", IMAGE_VIEW_ANY: "image:view:any", // User permissions USER_VIEW: "user:view", USER_EDIT: "user:edit", USER_DELETE: "user:delete", USER_MANAGE_ROLES: "user:manage:roles", } as const; // Role'lere göre izinler export const ROLE_PERMISSIONS: Record = { user: [ PERMISSIONS.IMAGE_UPLOAD, PERMISSIONS.IMAGE_DELETE_OWN, PERMISSIONS.IMAGE_VIEW_OWN, ], moderator: [ PERMISSIONS.IMAGE_UPLOAD, PERMISSIONS.IMAGE_DELETE_OWN, PERMISSIONS.IMAGE_VIEW_OWN, PERMISSIONS.IMAGE_VIEW_ANY, PERMISSIONS.USER_VIEW, ], admin: Object.values(PERMISSIONS), // Tüm izinler }; /** * Kullanıcının belirli bir role sahip olup olmadığını kontrol eder */ export function hasRole(userRole: UserRole, requiredRole: UserRole | UserRole[]): boolean { const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]; return roles.includes(userRole); } /** * Kullanıcının belirli bir izne sahip olup olmadığını kontrol eder */ export function hasPermission(userRole: UserRole, permission: string): boolean { const rolePermissions = ROLE_PERMISSIONS[userRole] || []; return rolePermissions.includes(permission); } /** * Kullanıcının birden fazla izne sahip olup olmadığını kontrol eder */ export function hasPermissions(userRole: UserRole, permissions: string[]): boolean { return permissions.every(permission => hasPermission(userRole, permission)); } /** * Kullanıcının en az bir izne sahip olup olmadığını kontrol eder */ export function hasAnyPermission(userRole: UserRole, permissions: string[]): boolean { return permissions.some(permission => hasPermission(userRole, permission)); } /** * Kullanıcının admin olup olmadığını kontrol eder */ export function isAdmin(userRole: UserRole): boolean { return userRole === "admin"; } /** * Kullanıcı bilgilerini userId'den alır */ export async function getUserById(userId: string) { const users = await db.select().from(user).where(eq(user.id, userId)).limit(1); return users[0] || null; } /** * Kullanıcının rolünü günceller (sadece admin yapabilir) */ export async function updateUserRole(userId: string, newRole: UserRole) { await db.update(user).set({ role: newRole, updatedAt: new Date() }).where(eq(user.id, userId)); }