PHPackages                             ddjuly/abac - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. ddjuly/abac

ActiveLibrary[Security](/categories/security)

ddjuly/abac
===========

0.2(7y ago)121PHP

Since Sep 18Pushed 7y ago1 watchersCompare

[ Source](https://github.com/ddjuly/abac)[ Packagist](https://packagist.org/packages/ddjuly/abac)[ RSS](/packages/ddjuly-abac/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (2)Dependencies (3)Versions (3)Used By (0)

关于abac权限管理
==========

[](#关于abac权限管理)

不装逼，不做作，不盲目滥用技术，只为实现功能，使用简单，功能齐全👻👻

安装
==

[](#安装)

### composer require安装

[](#composer-require安装)

```
composer require ddjuly/abac

```

### 添加到服务提供者

[](#添加到服务提供者)

1. 在config app.php providers数组中追加

```
\Abac\AbacServiceProvider::class,
```

2. 在config app.php aliases数组中追加

```
'Abac' => \Abac\AbacFacade::class,
```

### 创建abac表，默认abac\_前缀，当然你也可以改成你自己的，打命令会有提示😑

[](#创建abac表默认abac_前缀当然你也可以改成你自己的打命令会有提示)

```
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该中间件出来进行自定义，呵呵！

### Laravel坑逼路由终极大法，特么我们路由文件一路达到1k行，哦不，是2k行，这个锅Laravel必须得背

[](#laravel坑逼路由终极大法特么我们路由文件一路达到1k行哦不是2k行这个锅laravel必须得背)

### 终极大法配合权限管理很容易达到高潮

[](#终极大法配合权限管理很容易达到高潮)

```
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|角色名);
```

### Blade模板使用

[](#blade模板使用)

```
@role('角色名1|角色名2', true)
    {{'打工是不可能打工的，这辈子不可能打工'}}
@endrole

@permission('权限名')
    {{'做生意又不会，只能靠偷这种东西，才能维持现在的生活'}}
@endpermission

@ability('角色名', '权限名', false)
    {{'为什么不去打工，有手有脚的'}}
@endability
```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

2794d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4560684?v=4)[ddjuly](/maintainers/ddjuly)[@ddjuly](https://github.com/ddjuly)

---

Top Contributors

[![ddjuly](https://avatars.githubusercontent.com/u/4560684?v=4)](https://github.com/ddjuly "ddjuly (1 commits)")

### Embed Badge

![Health badge](/badges/ddjuly-abac/health.svg)

```
[![Health](https://phpackages.com/badges/ddjuly-abac/health.svg)](https://phpackages.com/packages/ddjuly-abac)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k4.8M26](/packages/tucker-eric-eloquentfilter)[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

196277.9k](/packages/fumeapp-modeltyper)[orchestra/canvas

Code Generators for Laravel Applications and Packages

21017.2M158](/packages/orchestra-canvas)[clickbar/laravel-magellan

This package provides functionality for working with the postgis extension in Laravel.

423715.4k1](/packages/clickbar-laravel-magellan)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
