feat(auth): implement Super Admin permission system
- Update AdminUser interface to match new API response structure - Remove permissions/roles from AdminUser (they come separately) - Update hasPermission logic: id=1 (AdminAll) = Super Admin access - Fix localStorage handling to remove admin_all_permissions key - Super Admin (permission id=1) now has access to everything - Other users checked against their specific permissions
This commit is contained in:
parent
bdfbef91ac
commit
d06135824d
|
|
@ -67,20 +67,18 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
|
|||
const refreshToken = localStorage.getItem('admin_refresh_token');
|
||||
const userStr = localStorage.getItem('admin_user');
|
||||
const permissionsStr = localStorage.getItem('admin_permissions');
|
||||
const allPermissionsStr = localStorage.getItem('admin_all_permissions');
|
||||
|
||||
if (token && userStr && permissionsStr) {
|
||||
try {
|
||||
const user = JSON.parse(userStr);
|
||||
const permissions = JSON.parse(permissionsStr);
|
||||
const allPermissions = allPermissionsStr ? JSON.parse(allPermissionsStr) : [];
|
||||
|
||||
dispatch({
|
||||
type: 'RESTORE_SESSION',
|
||||
payload: {
|
||||
user,
|
||||
permissions,
|
||||
allPermissions,
|
||||
allPermissions: permissions,
|
||||
token,
|
||||
refreshToken: refreshToken || ''
|
||||
}
|
||||
|
|
@ -90,7 +88,6 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
|
|||
localStorage.removeItem('admin_refresh_token');
|
||||
localStorage.removeItem('admin_user');
|
||||
localStorage.removeItem('admin_permissions');
|
||||
localStorage.removeItem('admin_all_permissions');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -104,16 +101,25 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
|
|||
localStorage.removeItem('admin_refresh_token');
|
||||
localStorage.removeItem('admin_user');
|
||||
localStorage.removeItem('admin_permissions');
|
||||
localStorage.removeItem('admin_all_permissions');
|
||||
dispatch({ type: 'LOGOUT' });
|
||||
toast.success('خروج موفقیتآمیز بود');
|
||||
};
|
||||
|
||||
const hasPermission = (permissionId: number): boolean => {
|
||||
// اگر Super Admin (id=1) باشد، به همه چیز دسترسی دارد
|
||||
const isSuperAdmin = state.permissions.some(permission => permission.id === 1);
|
||||
if (isSuperAdmin) return true;
|
||||
|
||||
// در غیر اینصورت چک کن permission مورد نیاز را دارد یا نه
|
||||
return state.permissions.some(permission => permission.id === permissionId);
|
||||
};
|
||||
|
||||
const hasPermissionByTitle = (title: string): boolean => {
|
||||
// اگر Super Admin (AdminAll) باشد، به همه چیز دسترسی دارد
|
||||
const isSuperAdmin = state.permissions.some(permission => permission.title === "AdminAll");
|
||||
if (isSuperAdmin) return true;
|
||||
|
||||
// در غیر اینصورت چک کن permission مورد نیاز را دارد یا نه
|
||||
return state.permissions.some(permission => permission.title === title);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -17,10 +17,6 @@ export const useLogin = () => {
|
|||
localStorage.setItem("admin_user", JSON.stringify(response.admin_user));
|
||||
localStorage.setItem(
|
||||
"admin_permissions",
|
||||
JSON.stringify(response.admin_user.permissions)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"admin_all_permissions",
|
||||
JSON.stringify(response.permissions)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -15,5 +15,4 @@ export const postLogout = () => {
|
|||
localStorage.removeItem("admin_refresh_token");
|
||||
localStorage.removeItem("admin_user");
|
||||
localStorage.removeItem("admin_permissions");
|
||||
localStorage.removeItem("admin_all_permissions");
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ export const getAuth = async () => {
|
|||
localStorage.removeItem("admin_refresh_token");
|
||||
localStorage.removeItem("admin_user");
|
||||
localStorage.removeItem("admin_permissions");
|
||||
localStorage.removeItem("admin_all_permissions");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ export interface AdminUser {
|
|||
first_name: string;
|
||||
last_name: string;
|
||||
status: "active" | "inactive";
|
||||
permissions: Permission[];
|
||||
roles: Role[];
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue