2013-09-24 85 views
5

Dự án tôi hiện đang làm việc được chia thành bảng điều khiển dành cho quản trị viên và giao diện người dùng thông thường. Cả front và backend đều nằm trong cùng một cá thể Laravel.Nhiều phiên xác thực trong Laravel 4

Trong giao diện người dùng, tôi đang cố gắng tạo hệ thống đăng nhập người dùng hoạt động riêng cho giao diện người dùng. Nó sử dụng một bảng và mô hình khác và nó có các quan hệ khác nhau như được chọn cho mô hình User cho quản trị viên.

Điều tôi không thể hiểu là cách sử dụng lớp Laravel Auth cho cả hai hệ thống. Hợp lý Auth sử dụng một tập tin cấu hình duy nhất, và nhiều hơn nữa đến điểm, một tên phiên.

Một giải pháp đã được đưa ra là không sử dụng một bảng và mô hình khác và sử dụng một số hình thức ACL cho sự khác biệt. Nhưng tôi không thích ý tưởng trộn frontend và backend theo cách này. Đặc biệt là vì nó sẽ có nghĩa là tôi đột nhiên phải cung cấp cho người dùng quản trị mô hình tất cả các lĩnh vực và các mối quan hệ trước đây duy nhất cho người dùng giao diện người dùng.

Nó dường như không đúng cách để làm mọi thứ. Tôi có thể chuyển sang một hệ thống xác thực khác hoặc tách riêng quản trị viên thành một gói có cấu hình riêng của nó nhưng phạm vi của dự án không cho phép các thay đổi thời gian như vậy.

Tôi muốn chào đón bất kỳ ý tưởng nào bạn có thể cung cấp.

+1

điều này có thể hữu ích http://stackoverflow.com/questions/18785754/laravel-4-need-to-auth-with-2-different-tables – cyvvilek

Trả lời

5

Đây là một vấn đề mà tôi gặp phải thời gian gần đây quá. Toàn bộ môi trường riêng biệt không phải là rất dễ dàng, đặc biệt nếu bạn đã có môi trường phát triển và sản xuất.

Tuy nhiên, tôi đã dành một chút thời gian để tạo một gói để giải quyết vấn đề này, mà bạn có thể tìm thấy tại https://github.com/ollieread/multiauth. Các gói phần mềm riêng của mình về cơ bản là một lớp nhà máy cho Auth, cho phép bạn sử dụng nhiều trường hợp của nó, vì vậy bạn truy cập vào nó như vậy:

Auth::admin()->check(); 
Auth::user()->check(); 
Auth::whatever()->check(); 

Tôi hy vọng gói giúp bạn hay bất cứ ai khác tìm cách tiếp cận này.

2

Tôi không chắc chắn, nhưng có thể nó hữu ích. Tại sao không thử tạo môi trường riêng cho admin. Và sau đó bạn sẽ có một cái gì đó như app/config/admin/session.php và app/config/session.php để sản xuất (đó là môi trường mặc định).

Bạn có thể thấy ở đây làm thế nào để thiết lập môi trường http://andrewelkins.com/programming/php/how-to-set-laravel-4-environments/

Nhưng như tôi đã nói nó chỉ là một ý tưởng, tôi không hoàn toàn chắc chắn về nó :)

+0

Môi trường rõ ràng là cách để đi đến đây. Thiết lập admin.yoursite.com và thay đổi các tập tin cấu hình cho phù hợp. Điều này giả định rằng bạn không thêm các phương thức tùy chỉnh vào lớp người dùng của bạn, đặc biệt là vai trò. – Makita

1

Có vẻ như bạn nên cân nhắc chia ứng dụng thành hai codebases nếu các thực thể người dùng khác nhau hiếm khi hoặc không bao giờ cần xem cùng một giao diện. Họ vẫn sẽ truy vấn cùng một cơ sở dữ liệu rõ ràng.

Điều này không chỉ giải quyết vấn đề xác thực của bạn mà còn giúp duy trì mã dễ dàng hơn rất nhiều. Ví dụ: trong khi đẩy cập nhật lên bảng điều khiển dành cho quản trị viên, bạn chỉ cần đặt ứng dụng đó ở chế độ bảo trì trong khi vẫn giữ nguyên (và có lẽ) giao diện quan trọng hơn và chạy.

+0

Đây thực sự là một điểm rất tốt.Chúng tôi đã bác bỏ ý tưởng chia tách các mã này bởi vì các lợi ích được nhiều hơn bởi những lo ngại trong trường hợp của chúng tôi. Tuy nhiên, điểm về các chế độ bảo trì riêng biệt có thể làm tăng quy mô. –