// Role-based Permission System
/**
* Sistem rolleri ve yetkileri
*/
export const ROLES = {
ADMIN: 'admin',
MANAGER: 'manager',
EMPLOYEE: 'employee'
};
/**
* İzin türleri
*/
export const PERMISSIONS = {
// Kullanıcı yönetimi
USER_CREATE: 'user:create',
USER_READ: 'user:read',
USER_UPDATE: 'user:update',
USER_DELETE: 'user:delete',
USER_LIST: 'user:list',
USER_SEARCH: 'user:search',
// Telefon transkript yönetimi
TRANSCRIPT_CREATE: 'transcript:create',
TRANSCRIPT_READ: 'transcript:read',
TRANSCRIPT_UPDATE: 'transcript:update',
TRANSCRIPT_DELETE: 'transcript:delete',
TRANSCRIPT_LIST: 'transcript:list',
TRANSCRIPT_SEARCH: 'transcript:search',
TRANSCRIPT_ANALYTICS: 'transcript:analytics',
TRANSCRIPT_EXPORT: 'transcript:export',
// Çağrı yönetimi
CALL_VIEW_ALL: 'call:view_all',
CALL_VIEW_OWN: 'call:view_own',
CALL_ASSIGN: 'call:assign',
CALL_ESCALATE: 'call:escalate',
// Sistem yönetimi
SYSTEM_ADMIN: 'system:admin',
PROFILE_UPDATE: 'profile:update',
PASSWORD_CHANGE: 'password:change',
// Audit log yönetimi
AUDIT_READ: 'audit:read',
AUDIT_READ_ALL: 'audit:read_all',
AUDIT_READ_SENSITIVE: 'audit:read_sensitive'
};
/**
* Role bazında izin matrisi
*/
export const ROLE_PERMISSIONS = {
[ROLES.ADMIN]: [
// Admin tüm yetkilere sahip
...Object.values(PERMISSIONS)
],
[ROLES.MANAGER]: [
// Kullanıcı yönetimi (kısıtlı)
PERMISSIONS.USER_READ,
PERMISSIONS.USER_UPDATE,
PERMISSIONS.USER_LIST,
PERMISSIONS.USER_SEARCH,
// Telefon transkript yönetimi
PERMISSIONS.TRANSCRIPT_CREATE,
PERMISSIONS.TRANSCRIPT_READ,
PERMISSIONS.TRANSCRIPT_UPDATE,
PERMISSIONS.TRANSCRIPT_LIST,
PERMISSIONS.TRANSCRIPT_SEARCH,
PERMISSIONS.TRANSCRIPT_ANALYTICS,
PERMISSIONS.TRANSCRIPT_EXPORT,
// Çağrı yönetimi
PERMISSIONS.CALL_VIEW_ALL,
PERMISSIONS.CALL_ASSIGN,
PERMISSIONS.CALL_ESCALATE,
// Audit log
PERMISSIONS.AUDIT_READ,
// Profil
PERMISSIONS.PROFILE_UPDATE,
PERMISSIONS.PASSWORD_CHANGE
],
[ROLES.EMPLOYEE]: [
// Kullanıcı yönetimi (sadece okuma)
PERMISSIONS.USER_READ,
PERMISSIONS.USER_LIST,
PERMISSIONS.USER_SEARCH,
// Telefon transkript (kendi çağrıları)
PERMISSIONS.TRANSCRIPT_CREATE,
PERMISSIONS.TRANSCRIPT_READ,
PERMISSIONS.TRANSCRIPT_UPDATE,
PERMISSIONS.TRANSCRIPT_LIST,
PERMISSIONS.TRANSCRIPT_SEARCH,
// Çağrı yönetimi (kendi çağrıları)
PERMISSIONS.CALL_VIEW_OWN,
// Audit log (sadece kendi logları)
PERMISSIONS.AUDIT_READ,
// Profil
PERMISSIONS.PROFILE_UPDATE,
PERMISSIONS.PASSWORD_CHANGE
]
};
/**
* Kullanıcının belirli bir yetkiye sahip olup olmadığını kontrol eder
*/
export function hasPermission(userRole, permission) {
if (!userRole || !permission) return false;
const rolePermissions = ROLE_PERMISSIONS[userRole];
if (!rolePermissions) return false;
return rolePermissions.includes(permission);
}
/**
* Kullanıcının birden fazla yetkiye sahip olup olmadığını kontrol eder
*/
export function hasAnyPermission(userRole, permissions) {
if (!userRole || !permissions || !Array.isArray(permissions)) return false;
return permissions.some(permission => hasPermission(userRole, permission));
}
/**
* Kullanıcının tüm yetkilere sahip olup olmadığını kontrol eder
*/
export function hasAllPermissions(userRole, permissions) {
if (!userRole || !permissions || !Array.isArray(permissions)) return false;
return permissions.every(permission => hasPermission(userRole, permission));
}
/**
* Kullanıcının sahip olduğu tüm yetkileri döndürür
*/
export function getUserPermissions(userRole) {
if (!userRole) return [];
return ROLE_PERMISSIONS[userRole] || [];
}
/**
* Kaynak bazlı yetki kontrolü (kendi kaydını düzenleyebilir)
*/
export function canAccessResource(userRole, userId, resourceUserId, permission) {
// Admin her şeye erişebilir
if (userRole === ROLES.ADMIN) return true;
// Kullanıcı kendi kaydına erişebilir
if (userId === resourceUserId) {
return hasPermission(userRole, permission);
}
// Manager kendi departmanındaki kullanıcılara erişebilir (gelecekte eklenebilir)
if (userRole === ROLES.MANAGER) {
return hasPermission(userRole, permission);
}
return false;
}
/**
* Yetki hatası fırlatır
*/
export function throwPermissionError(permission) {
throw new Error(`Bu işlem için '${permission}' yetkisine sahip değilsiniz`);
}
/**
* Middleware benzeri yetki kontrolü
*/
export function requirePermission(userRole, permission) {
if (!hasPermission(userRole, permission)) {
throwPermissionError(permission);
}
}