讨论数量:
你的路由设计的太复杂了吧 直接 articles/3 弄个articles的路由权限就行了 你的代码内部去判断这个文章是谁的
我目前是这样做的(仅供参考):
1、为每个需要判定权限的路由都定义好name
2、管理角色或者指定用户权限的时候取出所有设定过name的路由
3、保存设定的角色或用户权限数据
4、设定中间件判断权限
/**
* 匹配 laravel 参数路由
*
* "/parent/123/child/123" matches "/parent/{id}/child/{id}"
* "/parent/123/child/456" does not match "/parent/{id}/child/{id}"
* But KeyMatch3 will match both.
*
* @param string $key1
* @param string $key2
*
* @return bool
*/
public static function matchRequestPathWithParams(string $key1, string $key2): bool
{
$key2 = str_replace(['/*'], ['/.*'], $key2);
$tokens = [];
$pattern = '/\{([^\/]+)\}/';
$key2 = preg_replace_callback(
$pattern,
function ($m) use (&$tokens) {
$tokens[] = $m[1];
return '([^\/]+)';
},
$key2
);
$matched = preg_match_all('~^' . $key2 . '$~', $key1, $matches);
if (!$matched) {
return false;
}
$values = [];
foreach ($tokens as $key => $token) {
if (!isset($values[$token])) {
$values[$token] = $matches[$key + 1];
}
if ($values[$token] != $matches[$key + 1]) {
return false;
}
}
return true;
}
在 laravel 中,rbac 主要是 中间件实现的,在 YII2 中,是通过 行为 方式来处理的,本质都是在处理控制器之前,校验用户的权限是否满足系统的 rbac 表里的规则
我目前是这样做的(仅供参考):
1、为每个需要判定权限的路由都定义好name
2、管理角色或者指定用户权限的时候取出所有设定过name的路由
3、保存设定的角色或用户权限数据
4、设定中间件判断权限