# HOCMAI Role Management Package

Package quản lý Phân quyền & Vai trò người dùng (Role Management V2) độc lập cho Laravel.

## 🚀 Tính năng
- Quản lý danh sách vai trò (Giao diện V2 chuẩn Tailwind CSS).
- Thêm mới / Chỉnh sửa vai trò.
- Ma trận phân quyền theo Route chức năng (tìm kiếm, chọn theo nhóm, chọn tất cả).
- Gán / Gỡ vai trò cho người dùng (Dual list box + quick filter).
- Trait `HasRoles` cung cấp hàm `$user->hasRole(...)`, `$user->hasPermission(...)`.
- Hỗ trợ cả Single-DB chuẩn Laravel và Dynamic Multi-tenant Connection.

---

## 📦 Cài đặt trên hệ thống Laravel mới

### Cách 1: Cài đặt từ Git Repository nội bộ (Khuyên dùng)
1. Thêm repository vào `composer.json` của dự án đích:
```json
"repositories": [
    {
        "type": "vcs",
        "url": "git@gitlab.com:hocmai/role-management.git"
    }
]
```

2. Cài đặt package qua Composer:
```bash
composer require hocmai/role-management
```

3. Chạy migration:
```bash
php artisan migrate
```

---

### Cách 2: Cài đặt dạng Local Path (Monorepo)
1. Copy thư mục package vào `packages/hocmai/role-management` của project mới.
2. Thêm vào `composer.json`:
```json
"repositories": [
    {
        "type": "path",
        "url": "packages/hocmai/role-management",
        "options": {
            "symlink": true
        }
    }
]
```
3. Chạy lệnh:
```bash
composer require hocmai/role-management:"@dev"
php artisan migrate
```

---

## ⚙️ Cấu hình

Xuất bản file cấu hình (nếu muốn đổi Layout cha hoặc Route prefix):
```bash
php artisan vendor:publish --tag=role-config
```

File cấu hình `config/role.php`:
```php
return [
    // Tên master layout trong ứng dụng cha
    'layout' => 'layouts.app',

    // Cấu hình URL & Middleware
    'routes' => [
        'prefix' => 'admin/roles',
        'as' => 'role.',
        'middleware' => ['web', 'auth'],
    ],

    // Model User
    'models' => [
        'user' => \App\Models\User::class,
    ],
];
```

---

## 🧑‍💻 Sử dụng Trait trong User Model

Trong `app/Models/User.php`:
```php
namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Hocmai\RoleManagement\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
    
    // ...
}
```

Kiểm tra quyền bất kỳ đâu:
```php
// Kiểm tra vai trò
if (auth()->user()->hasRole('Admin')) {
    // ...
}

// Kiểm tra quyền theo route
if (auth()->user()->hasPermission('role.index')) {
    // ...
}

// Gán vai trò
$user->assignRole('Teacher');
```
