不装逼,不做作,不盲目滥用技术,只为实现功能,使用简单,功能齐全👻👻
composer require ddjuly/abac
- 在config app.php providers数组中追加
\Abac\AbacServiceProvider::class,
- 在config app.php aliases数组中追加
'Abac' => \Abac\AbacFacade::class,
php artisan abac.create-table
'permission' => \Abac\Middleware\AbacPermission::class,
'role' => \Abac\Middleware\AbacRole::class,
'ability' => \Abac\Middleware\AbacAbility::class,
// 路由
Route::get('/home', 'HomeController@index')->name('home')->middleware("permission:权限名");
Route::get('/home', 'HomeController@index')->name('home')->middleware("role:角色名");
Route::get('/home', 'HomeController@index')->name('home')->middleware("ability:权限名");
您也可以copy该中间件出来进行自定义,呵呵!
Route::group(['prefix' => 'prefix'],function(){
if (strlen($_SERVER['REQUEST_URI']) < 4 || strpos($_SERVER['REQUEST_URI'], '/prefix') === false) {
return;
}
$space = 'Mgr';
$arr = explode('/',explode('?',$_SERVER['REQUEST_URI'])[0]);
$index = '/' . $arr[2] . '/' . $arr[3];
$reflectionClass = new ReflectionClass("App\Http\Controllers\{$space}\\". $arr[2] ."Controller");
$reflectionMethod = $reflectionClass->getMethod($arr[3]);
$doc = $reflectionMethod->getDocComment();
preg_match('/@permission(.*?)\n/', $doc, $permission);
if ($permission && isset($permission[1])) {
$permission = trim($permission[1]);
if ($permission) {
Route::match(['get', 'post'], $index, value(function() use ($arr){
return "{$space}\\{$arr[2]}Controller@{$arr[3]}";
}))->middleware("permission:{$permission}");
} else {
Route::match(['get', 'post'], $index, value(function() use ($arr){
return "{$space}\\{$arr[2]}Controller@{$arr[3]}";
}));
}
} else {
Route::match(['get', 'post'], $index, value(function() use ($arr){
return "{$space}\\{$arr[2]}Controller@{$arr[3]}";
}));
}
});
大法需要获取路由到的function中的注释,比如:@permission
当然你可以修改,比如@role、@ability,根据自己的想法去自定义
这里有一个需要注意的地方就是,大法路由不能通过URL类来直接生成url,这是一个问题,本银是通过改那该死的源码实现的
例子:
/**
* @permission 供应商管理
* @return string
*/
public function saveDirectProduct() {
$field = $this->getField([
'direct_link' => 'required|string|min:1',
]);
}
\Abac::addRole(角色名);
\Abac::addPermission(权限名);
\Abac::addPermission2Role(角色id(int)|角色名(string), 权限id(int)|权限名(string));
\Abac::addUser2Role(用户id, 角色id(int)|角色名(string));
\Abac::addUser2Permission(用户id, 权限id(int)|权限名(string));
\Abac::delPermission(权限id|权限名);
\Abac::delRole(角色id|角色名);
\Abac::removePermissionOfRole(权限i|d权限名, 角色id|角色名);
\Abac::removePermissionOfUser(用户id, 权限id|权限名);
\Abac::removeRoleOfUser(用户id, 角色id|角色名);
@role('角色名1|角色名2', true)
{{'打工是不可能打工的,这辈子不可能打工'}}
@endrole
@permission('权限名')
{{'做生意又不会,只能靠偷这种东西,才能维持现在的生活'}}
@endpermission
@ability('角色名', '权限名', false)
{{'为什么不去打工,有手有脚的'}}
@endability