Kiểm tra vai trò đang đăng nhập trong laravel
Một user có nhiều vai trò, có cách nào để e kiểm tra được user đang đăng nhập với vai trò nào không ạ
5 CÂU TRẢ LỜI
bạn hãy tách riêng bảng users và roles ra, tạo thêm một bảng user_role, lúc này thì users và roles có quan hệ n-n. Nhưng đó là trường hợp user trong một lần đăng nhập có thể đảm nhiệm tất cả các quyền của nó. Còn theo câu hỏi của bạn thì mình lại đang hiểu rằng một lần đăng nhập của bạn, user lại chỉ được kích hoạt một trong những quyền của nó? Có phải không nhỉ?
dạ đúng rồi, trường hợp của em là đang quan hệ n-n nhưng khi đăng nhập chỉ kích họat một vai trò đó a
@duongdosieu224 thế thì bạn phải cho người dùng được chọn role lúc đăng nhập nhỉ? Hoặc là đăng nhập theo tuỳ link sẽ là tuỳ role. Sau đó bạn lưu lại role đó vào session hoặc cookie rồi xử lý như phân quyền bt
Vai trò này thì bạn định nghĩa là một field của user khi lấy user ra thì field này sẽ cho bạn biết vai trò của user đó. Hoặc bạn tạo một bảng về vai trò (role) và ở bảng này bạn có thêm vai trò của bạn ở đây và tạo relationship với user https://laravel.com/docs/7.x/eloquent-relationships#many-to-many, ở docs của laravel cũng có ví dụ ntn
Trong TH 1 user có nhiều vai trò thì bạn tạo 3 bảng users (id), roles (id), user_role (id, role_id, user_id) thì sẽ định nghĩa được 1 user có nhiều vai trò. Còn để kiểm tra được thì bạn có thể làm bằng cách viết 1 middleware trong đó lấy tất cả các role của user đó rồi in_array() với role bạn cần check. đó là ý tưởng
Thường thì khi thực hiện phân quyền cho user thì mình sẽ thiết kế gồm 3 bảng như sau: users, role, user_role(trung gian) rồi khi trả về dữ liệu của user đang đăng nhập thì trả thêm cả role vào nữa thôi, thường thì sẽ dùng eloquent để lấy quan hệ user-role
bọn có thể thêm 1 column role tại bảng user hoặc thêm 1 bảng roles mới liên kết với bảng user để giúp bạn xác định xem user đang login co role là như nào để xem thông tin của người dùng đang đăng nhập trong hệ thống bạn có thể dùng $request->user() hoặc Auth::user()