// Đăng ký kích hoạt Role Quản lý hợp đồng trong WordPress function vibhome_register_contract_manager_role() { if (!get_role('contract_manager')) { add_role( 'contract_manager', 'Quản lý hợp đồng', array( 'read' => true, 'edit_posts' => false, ) ); } } add_action('init', 'vibhome_register_contract_manager_role'); //chặn vào crm add_action('template_redirect', 'vibhome_unified_pages_router_v49'); function vibhome_unified_pages_router_v49() { $request_uri = strtok($_SERVER['REQUEST_URI'], '?'); $path = rtrim($request_uri, '/'); // Kiểm soát chặt chẽ đường dẫn /quan-ly-crm if ($path === '/quan-ly-crm') { if (is_user_logged_in()) { $current_user = wp_get_current_user(); $roles = (array)$current_user->roles; $login_lower = strtolower($current_user->user_login); $db_role = isset($current_user->role) ? strtolower(trim($current_user->role)) : ''; // Kiểm tra xem user có phải là Kế toán, Kiến trúc sư hoặc Quản lý hợp đồng hay không $is_restricted = ( in_array('accountant', $roles) || in_array('architect', $roles) || in_array('contract_manager', $roles) || $db_role === 'accountant' || $db_role === 'architect' || $db_role === 'contract_manager' || strpos($login_lower, 'ketoan') !== false || strpos($login_lower, 'kientrucsu') !== false || strpos($login_lower, 'kts') !== false ); // Nếu thuộc nhóm bị hạn chế, lập tức chặn và đá văng về trang quản lý hợp đồng hoặc trang chủ if ($is_restricted) { wp_safe_redirect(home_url('/quan-ly-hop-dong/')); exit; } } else { // Nếu chưa đăng nhập mà vào /quan-ly-crm thì chuyển về trang hợp đồng/đăng nhập wp_safe_redirect(home_url('/quan-ly-hop-dong/')); exit; } } } // Tự động gán đúng role khi tạo tài khoản mới add_action('user_register', 'vibhome_auto_assign_user_role_on_create'); // Tự động cập nhật lại role nếu tên đăng nhập thay đổi hoặc chỉnh sửa profile add_action('profile_update', 'vibhome_auto_assign_user_role_on_create'); function vibhome_auto_assign_user_role_on_create($user_id) { // Không chạy nếu là AJAX / cron / background job không liên quan để tránh lỗi if (defined('DOING_AJAX') && DOING_AJAX) { // Vẫn cho phép chạy qua AJAX nếu đang tạo user từ trang quản trị } $user = get_userdata($user_id); if (!$user) { return; } $login_lower = strtolower($user->user_login); $target_role = 'sale'; // Mặc định là sale // Kiểm tra tên đăng nhập để phân quyền chuẩn if (strpos($login_lower, 'ketoan') !== false) { $target_role = 'accountant'; } elseif (strpos($login_lower, 'kientrucsu') !== false || strpos($login_lower, 'kts') !== false) { $target_role = 'architect'; } elseif (strpos($login_lower, 'quanly') !== false || strpos($login_lower, 'contract') !== false || $login_lower === 'trunggdtc') { $target_role = 'contract_manager'; // Gán chuẩn role Quản lý hợp đồng } elseif ($login_lower === 'admin' || $login_lower === 'adminvibhome') { $target_role = 'administrator'; // Giữ quyền admin tối cao nếu là tài khoản quản trị } // Gán trực tiếp role vào WordPress user object $user->set_role($target_role); } // 1. NHẬN DIỆN VAI TRÒ CRM MANAGER & ADMINISTRATOR LÀ ADMIN TRANG HỢP ĐỒNG function vibhome_is_contract_admin_v49($user) { if (!$user || !is_user_logged_in()) return false; $roles = (array)$user->roles; $db_role = isset($user->role) ? strtolower(trim($user->role)) : ''; return current_user_can('manage_options') || in_array('administrator', $roles) || in_array('crm_manager', $roles) || in_array('contract_manager', $roles) || $db_role === 'crm_manager' || $db_role === 'contract_manager' || $db_role === 'administrator'; } // 2. TỰ ĐỘNG GHI 'crm_manager' VÀO CỘT role BẢNG wp_users KHI LƯU USER // TỰ ĐỘNG BẢO VỆ VÀ GHI ĐÚNG ROLE VÀO CỘT `role` BẢNG WP_USERS add_action('user_register', 'vibhome_sync_custom_db_role', 20); add_action('profile_update', 'vibhome_sync_custom_db_role', 20); function vibhome_sync_custom_db_role($user_id) { $user = get_userdata($user_id); if (!$user) return; $roles = (array)$user->roles; $login_lower = strtolower($user->user_login); // Mặc định là sale $db_role_value = 'sale'; // Ưu tiên nhận diện đúng các vai trò quản lý / admin if (in_array('contract_manager', $roles)) { $db_role_value = 'contract_manager'; } elseif (in_array('crm_manager', $roles)) { $db_role_value = 'crm_manager'; } elseif (in_array('administrator', $roles) || strpos($login_lower, 'admin') !== false) { $db_role_value = 'administrator'; } elseif (in_array('accountant', $roles) || strpos($login_lower, 'ketoan') !== false) { $db_role_value = 'accountant'; } elseif (in_array('architect', $roles) || strpos($login_lower, 'kientrucsu') !== false || strpos($login_lower, 'kts') !== false) { $db_role_value = 'architect'; } // Cập nhật chuẩn xác vào cột role của bảng wp_users global $wpdb; $wpdb->update( $wpdb->users, array('role' => $db_role_value), array('ID' => $user_id) ); } // Thêm bộ lọc hiển thị tên tiếng Việt cho role contract_manager nếu WordPress không tự nhận add_filter('editable_roles', function($roles) { if (isset($roles['contract_manager'])) { $roles['contract_manager']['name'] = 'Quản lý hợp đồng'; } else { $roles['contract_manager'] = array( 'name' => 'Quản lý hợp đồng', 'capabilities' => array('read' => true) ); } return $roles; }); add_action('template_redirect', 'vibhome_block_crm_page_native'); function vibhome_block_crm_page_native() { // Kiểm tra chính xác xem có phải đang truy cập trang có slug là 'quan-ly-crm' không if ( is_page('quan-ly-crm') ) { if ( is_user_logged_in() ) { $current_user = wp_get_current_user(); // 🛑 DANH SÁCH TÀI KHOẢN CỤ THỂ BỊ CHẶN (Điền user_login vào đây) $blocked_usernames = array('kientrucsu2','ketoan1'); // Nếu muốn chặn thêm tài khoản khác: array('kientrucsu2', 'user_khac') // Nếu tài khoản đăng nhập nằm trong danh sách chặn if ( in_array($current_user->user_login, $blocked_usernames) ) { // Lập tức chuyển hướng ra trang quản lý hợp đồng wp_redirect( home_url('/quan-ly-hop-dong/') ); exit; } } } }