对于仅允许用户访问MVC应用程序中的某些控制器操作的最佳实践,这是一个理论问题。
我有两种类型的用户,"系统用户" &安培; "远程用户"。每个仅都可以访问自己的一组页面。
这是来自前一个开发人员的继承框架,并且会自动生成路由,因此没有设置定义。
我考虑过创建白名单类型的访问,而不是使用完整的ACL访问方法。我应该在路由器前还是按方法进行?
同样,我以前从来没有这样做,所以我想做的事情就是:
$system_users = [
'/path/to/page',
'/path/to/page2',
'/path/to/page3',
'/path/to/page4',
//....etc
];
$remote_users = [
'/remote/page',
'/remote/page2',
//....etc
];
然后在Router
之前运行自定义检查(仅在用户登录时),例如:
$user_type = '';
if(Session::get('remote.id') !== FALSE){
$user_type = 'remote';
} else if(Session::get('system.id') !== FALSE) {
$user_type = 'system';
}
// now run list
if(!empty($user_type)) {
if(!in_array(REQUESTED_ROUTE, ${$user_type.'_users'})){
// Access Denied
redirect('/NOT_ALLOWED');
}
// otherwise carry on with routing.
}
以上是伪代码。
实现这一目标的最佳方法是什么?在会话中运行它?预路由器?任何帮助将不胜感激。
答案 0 :(得分:0)
您应该创建一个包含组和权限的数据库表(ACL组件/控制器)。 然后,您需要将一个(或没有)允许的页面分配到表中。
用户尝试转到其他页面后 - 您需要检查页面地址(或检查他尝试执行的Controller + Action)并提供信息或错误消息。
你应该有3个表:
在您需要创建下一列的操作中:
V.2 - 页面
在权限中:
群组表:
当您添加一些新动作时,您需要将其添加到所有群组,并且不允许'权限(将访问权限设置为0)。当您删除某些操作时 - 您需要使用外键删除权限表中的所有操作。