Multype-auth trong laravel
em hiểu Multtype-auth là mỗi một hệ thống website thông thường sẽ gốm một phần dành cho admin quản lý và một phần dành cho user thông thường sử dụng, chính vì vậy các website sẽ rất cần sử dụng multiple authenticate,nhưng em có 1 user admin để quản trị và 1 user khách để view,thì phân quyền như nào ạ,em vẫn chưa hiểu lắm,thường thì phân quyền dùng gate-polyci,em xin cảm ơn.
1 CÂU TRẢ LỜI
- Nếu chủ thớt chỉ muốn là giới hạn admin vs user thường ở một số trang thôi thì có thể dùng middleware của laravel cho trang cần phân quyền là được rồi chứ không cần phức tạp thêm đâu. Nếu đã có cơ sở để phân biệt admin, user rồi thì không phải thêm bảng gì hết nữa cả.
class AdminOnly
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = $request->user();
if (!$user || $user->isAdmin !== true) {
return abort(403, 'Permission Denied');
}
return $next($request);
}
}
Sau đó thì dùng middleware này khi khai báo route:
Route::get('/private-page', 'Controller@action', ['middleware' => 'admin']);
Route::group(['prefix' => '/admin', 'middleware' => 'admin'], function () {
Route::get('/dashboard', ...);
});
- Không thích dùng middleware như kia thì dùng Gate/Policy là chuẩn bài rồi
vâng tại em đang thắc mắc là dùng mutlype thì tạo 2 table admin và user, nếu dùng gate và polyci thì 1 bảng user cho 1 type phân biệt đâu là admin và user,
@khanh1234 Có hai cách như này:
- Nếu tạo 2 table thì sẽ cần config multi login nữa. Cái này laravel có hỗ trợ, chỉ cần config lại trong
config/auth.php
. Nhưng mà khi làm như vậy thì sẽ có hai trang login riêng biệt và 2 session riêng biệt. VD: http://example.localhost cho user thường. http://admin.example.localhost => cho admin đăng nhập. - Admin và user đăgn nhập cùng ở trang là example.local nhưng truy cập các route bắt đầu là /admin thì sẽ vào phần quản trị. Phần quản trị này đặt middleware như answer của mình là ổn. Không phải tạo 2 bảng admin và user. Không phải multi login.
@huukimit vâng em đang bị rối chỗ đó, nếu tạo 2 table thì hai trang login lận,
Dùng gate / policy không phải tách 2 bảng user và admin nữa đâu nhé.
Chỉ cần có một trường trong bảng user để căn cứ để kiểm tra xem là admin hay user thường là ổn rồi
@huukimit vâng nếu thê em có phải tạo thêm các premission và role k ạ
@huukimit tại vì em làm bảng admin là quản trị,user thì chỉ xem sách thôi ạ
@khanh1234 Nếu bạn không cần quá phức tạp như phải tạo từng nhóm quyền, mỗi nhóm thì có những quyền nào, ai thì thuộc nhóm nào, quyền nào... thì không cần tạo các bảng permissions, roles.. nữa. Chỉ có thể tạo thêm một field role
vào bảng users
dùng để kiểm tra xem ai là admin
, ai là user
thường. Khi đó sẽ kết hợp dùng Middleware, Gate / Policy của Laravel.
nếu em dung multype và đăng nhập cùng vào 1 trang login để quản trị,nhưng chỉ admin là thêm,sửa,xóa,còn user chỉ xem thì em dùng gate-polyci được k anh
@khanh1234 Được vì cái multi-auth nó không liên quan tới phần gate policy, multi-auth chỉ dùng cho việc đăng nhập thôi. Dù làm multi auth hay không thì vẫn phải dùng gate / policy và middleware để thực hiện phân quyền nhé.
Nếu thích phân quyền rõ ràng theo role, permission mà không muốn code nhiều thì bạn dùng hàng ăn sẵn nè: https://github.com/spatie/laravel-permission
@huukimit tks anh ,thế trong bảng admins và user em thêm 1 boolean để phân biệt admin và user sau đó dùng gate và polyci để thực hiện phân quyền
@khanh1234 Có gì dùng gate policy mà gặp vấn đề thì bạn lại lên đây tạo quesion mới mình support tiếp nhé. Đừng quên vote / accept answer giúp mình để mình kiếm trác tí reputation nhé.
Ý bạn là làm chức năng đăng nhập cho admin và user ở hai trang riêng khác nhau hả? VD:
Và sẽ có 2 trang đăng nhập khác nhau?
Hay là bạn muốn hỏi cách để một số trang nhất định thì chỉ admin vào được?
@huukimit vâng, mình dùng để admin có quyền thêm,sửa,xóa, còn cái user thì chỉ có quyền xem ,
@huukimit đọc trên mạng thì có 2 trang register và login nên mk vẫn chưa hiểu lắm,