perl - 在 mojolicious 中处理路由权限
问题描述
我正在与不同类型的用户(管理员、普通用户、访客)合作,并希望授予每种类型的用户访问 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
在这个钩子中钻取一个对象来做到这一点?
解决方案
以下提取了我需要的所有信息:
$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
子例程检查提供的用户是否有权访问请求的路由/操作。
推荐阅读
- awkward-array - 绘制不同长度的锯齿状数组
- java - 如何检查两个字符串是否是字谜?
- reactjs - usereducer 不会更新状态
- javascript - 通过调节另一个对象属性来访问对象数组中的对象值
- c# - 在 Xamarin 表单中重置选取器显示值
- java - Quarkus 读取 `ResultSet` 并使用多线程处理
- tensorflow - 我在使用 tensorflow-gpu 时遇到问题。分配器 (GPU_0_bfc) 内存不足,试图在 freed_by_count=0 的情况下分配 2.20GiB
- jquery - 附加在调整大小和加载多个实例
- sql - 调整结束日期
- wordpress - 更改 WooCommerce 电子邮件字体系列