first commit
This commit is contained in:
93
app/lib/permissions.ts
Normal file
93
app/lib/permissions.ts
Normal file
@@ -0,0 +1,93 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user