PHP - 在MVC应用程序中放置RBAC和Authentification的位置?

Inf*_*ien 5 php authentication model-view-controller acl rbac

我正在使用这种结构的MVC应用程序:

   Request
      V
FrontController <-> Router
      V
  Controller <-> Model
      V
     View
Run Code Online (Sandbox Code Playgroud)

我还需要在此结构中放置另外两个组件:

  • Authentification:使用$_SESSION全局变量记录用户;
  • RBAC:基于角色的访问控制,可以检查角色是否具有授予"ressource"(Controller方法)的访问权限.

每个用户都可以拥有任意数量的角色(他们也可以没有角色).

现在,我需要将这两个组件放在我的应用程序中,我需要它们能够:

  • 如果User未进行authed并且Request需要User执行authed ,则应将客户端重定向到登录页面;
  • 如果RBAC看到authed User没有一个角色具有授予执行方法所需的"ressource"访问权限的角色,那么仍然应该执行该Controller方法,Controller但知道该方法User没有这样做的权限(示例:A User撰写文章但没有权利发布它,因此文章将保存为草稿,并User告知Moderator必须发布它).

我已经有一些想法可以找到它Authentification,RBAC但我不确定:

  • Authentification可以进入FrontController或者Router;
  • RBAC可以进入FrontControllerController.

我看到有人把它RBAC放在模型中,但我不明白为什么.

我想对这个问题有一些见解.我应该在哪里放置AuthentificationRBAC组件?

谢谢!

rla*_*vin 1

在典型的 MVC 应用程序中,身份验证检查(即“如果不是身份验证,则停止并渲染登录页面”)是在处理请求的早期完成的,而业务逻辑(即“如果用户具有此权限,则发生这种情况,否则会发生这种情况”)在“C”(控制器)内处理。

大多数框架都有一个用于测试的机制,例如您所描述的身份验证检查 - 名称各不相同,但我经常看到它称为“中间件”。

基于角色的访问控制纯粹是您的实现。