【问题标题】:handling route permissions in mojolicious在 mojolicious 中处理路由权限
【发布时间】:2021-09-09 04:50:01
【问题描述】:

我正在与不同类型的用户(管理员、普通用户、访客)合作,并希望授予每种类型的用户访问 mojolicious 应用程序中不同路线的权限。我的想法是为每种用户类型构建一个权限表,以便能够访问不同的路由(通过路径或更可能通过操作名称)。

我正在考虑使用around_dispatch 挂钩在更全局的级别上处理此问题,并查询数据库以查找可以针对哪种用户类型访问哪些操作(子例程)。

这看起来有点像:

$self->hook( around_dispatch => sub ($next,$c) {

    if (logged in user has permissions) {
        $next->();
    } else {
       $c->redirect_to('/permission_error');
    } 
});

我希望确定为给定路线调用的操作。有没有办法在这个钩子中向下钻取 Mojolicious::Controller 对象来做到这一点?

【问题讨论】:

  • 你能发布一个最小的例子吗?
  • 添加了一个小例子。
  • 如果你使用钩子,你可能想要在路由阶段之后触发的东西,比如around_action。在您的around_action 回调中,您可以访问$c->stash('mojo.captures');,它为您提供控制器和操作。确保同时检查$last 标志。
  • 如果您的访问组是“包容性”的,即管理员拥有常规的所有权限 - 加上更多权限,使用路由和under 可能更容易。

标签: perl mojolicious


【解决方案1】:

以下内容提取了我需要的所有信息:

$self->hook(
        around_action => sub {
            my ($next, $c, $action, $last) = @_;
            if (has_permssion($c->current_user,$c->{stash}->{action})) {
                return $next->();
            } else {
                $c->redirect_to('/permission_error');
            }
        }
    );

我使用Mojolicious::Plugin::Authentication 处理身份验证和用户,has_permission 子例程检查提供的用户是否有权访问请求的路由/操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2023-03-03
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多