Slim 3. 我应该使用分组路由吗?

Slim 3. Should i use grouped routes?

我正在开发一个相当大的应用程序,使用 slim 3 作为我的路由器。 菜单结构是这样的。有些路线需要分组,有些则不需要(我认为)。我不确定我应该怎么做。

示例菜单结构。但它将容纳更多物品。在这里分组是个好主意吗?我的意思是,如您所见,并非所有 "clients" 都有 "settings" 子 page/route,但将来可能会有。怎么写这样的分组逻辑?

client 1
    info
    settings
    loremipsum
    loremipsum

client 2
    info
    loremipsum
    loremipsum

client 3
    info
    loremipsum
    loremipsum

您可以实现一个小型中间件并检查每个客户端的权限。

设置 "determineRouteBeforeAppMiddleware" 必须设为真。

use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;

$app = new App([
    'settings' => [
        // Must be set to true to get access to route within middleware
        'determineRouteBeforeAppMiddleware' => true
    ]
]);

然后添加这个中间件并自定义它:

$container = $app->getContainer();

// Simple Route Access Control Middleware
$app->add(function (Request $request, Response $response, $next) use ($container) {
    // Retrieving Current Route

    /* @var \Slim\Route $route */
    $route = $request->getAttribute('route');

    if (!$route) {
        return $next($request, $response);
    }

    $name = $route->getName();
    $groups = $route->getGroups();
    $methods = $route->getMethods();
    $arguments = $route->getArguments();

    // Do something with that information
    // Check the permissions here...
    $routePermission = $container->get(RoutePermission::class);

    if (!$routePermission->isRouteAllowed($name, $arguments['client'])) {
        // Permission denied
        return $response->withStatus(403, 'Forbidden');
    } else {
        // OK :-)
        return $next($request, $response);
    }
});