94 lines
2.6 KiB
TypeScript
94 lines
2.6 KiB
TypeScript
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<UserRole, string[]> = {
|
||
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));
|
||
}
|