应用权限
应用权限管理用于控制后端路由的访问与前端的模块显示,前端每次登录后会自动获取当前权限来展示内容,同时前台菜单也可与权限做关联。
权限初始化
资源注册时已经进行了权限的初始化,如果单独使用自定义权限时,在应用入口文件 App.php
中的 init
方法进行初始化,如下:
php
// 初始化权限类
$app->getPermission()->set("admin", new DuxPermission());
// 初始化权限类
$app->getPermission()->set("admin", new DuxPermission());
使用权限类
使用权限需要按照以下步骤进行操作:
- 获取权限标识权限类
php
use Dux\Permission\Permission as DuxPermission;
// 获取 admin 标识权限类
$permission = $app->getPermission()->get("admin");
use Dux\Permission\Permission as DuxPermission;
// 获取 admin 标识权限类
$permission = $app->getPermission()->get("admin");
- 创建权限组
php
/**
* 创建权限组
* @param string $name 权限组前缀,用于权限的前缀内容
* @param int $order 权限顺序,用于权限选择展示
* @return PermissionGroup
*/
$group = $permission->group("test.home");
/**
* 创建权限组
* @param string $name 权限组前缀,用于权限的前缀内容
* @param int $order 权限顺序,用于权限选择展示
* @return PermissionGroup
*/
$group = $permission->group("test.home");
- 向权限组中添加权限条目
php
/**
* 添加权限条目
* @param string $name 权限组内标记
*/
$group->add("index");
/**
* 添加权限条目
* @param string $name 权限组内标记
*/
$group->add("index");
您还可以注册应用权限到权限配置类中
php
// 注册应用权限到权限类
$adminPermission = $app->getPermission()->get("admin");
Permission::Admin($adminPermission);
// 注册应用权限到权限类
$adminPermission = $app->getPermission()->get("admin");
Permission::Admin($adminPermission);
最终会形成上下级的权限表提供给管理端作为权限表数据使用,同时并自动合并上下级条目与组的数据供权限判断,如下:
php
$data = [
'test.home.index',
...
];
$data = [
'test.home.index',
...
];
使用资源权限方法
我们提供了 resources 方法,以便简化管理层路由的权限注册方式。该方法会自动注册 list
info
add
edit
del
store
等常用的增删查改权限到对应的类方法内,示例如下:
php
/**
* @param string $name 标记前缀
* @param int $order 排序
* @param array $ways 允许方法名
* @return PermissionGroup
*/
$permission->resources("system.user");
/**
* @param string $name 标记前缀
* @param int $order 排序
* @param array $ways 允许方法名
* @return PermissionGroup
*/
$permission->resources("system.user");
该方法会返回权限组方法,您可以继续在之后增加权限条目。
权限中间件
如果你想使用权限功能,你需要为路由注册权限中间件以便自动判断用户权限,示例如下:
php
$app->getRoute()->set("admin",
new DuxRoute("/admin", "管理端",
/**
* @params string $name 权限类标识
* @params string $model 用户模型类,该模型需要以 id 作为主键并返回 permission 作为已授权的权限数组,如果为空则不验证。
*/
new PermissionMiddleware("admin", SystemUser::class),
)
);
$app->getRoute()->set("admin",
new DuxRoute("/admin", "管理端",
/**
* @params string $name 权限类标识
* @params string $model 用户模型类,该模型需要以 id 作为主键并返回 permission 作为已授权的权限数组,如果为空则不验证。
*/
new PermissionMiddleware("admin", SystemUser::class),
)
);
权限列表
使用以下方法来获取所有权限,用于权限配置时使用。
php
$permissions = App::permission("admin")->getData();
$permissions = App::permission("admin")->getData();
权限描述
权限描述使用语言包内对应的标识实现,所以推荐权限标记为对应的应用.模块.方法
,方便统一处理。
如:test.home.index
则会获取 App/Test/Langs/manage.xxx.yaml
中的 test.home.index.name
语言变量作为权限的描述。