This question already has answers here:
How can I implement an Access Control List in my Web MVC application?

(3个答案)


4年前关闭。




我正在使用这种结构的MVC应用程序:
   Request
      V
FrontController <-> Router
      V
  Controller <-> Model
      V
     View

我需要在此结构中放置两个其他组件:
  • Authentification:使用$_SESSION全局变量登录用户;
  • RBAC:基于角色的访问控制,可以检查角色是否具有授予“资源”的访问权限(Controller方法)。

  • 每个用户可以具有任何给定数量的角色(他们也可以没有任何角色)。

    现在,我需要将这两个组件放置在我的应用程序中,我需要它们能够:
  • 如果未认证User,并且Request需要执行已认证的User,则应将客户端重定向到登录页面;否则,客户端将被重定向到登录页面。
  • 如果RBAC看到已授权的User不具有已授予执行Controller的方法所需的“资源”的访问权限的角色,则仍应执行Controller的方法,但要知道User没有拥有这样做的权限(示例:User撰写文章,但无权发布,因此该文章将另存为草稿,并告知User必须发布Moderator)。

  • 我已经有了一些在哪里找到AuthentificationRBAC的想法,但是我不确定:
  • Authentification可以放在FrontControllerRouter中;
  • RBAC可以放入FrontControllerController中。

  • 我看到有人将RBAC放入模型中,但我不明白为什么。

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

    谢谢!

    最佳答案

    在典型的MVC应用程序中,身份验证检查(即“如果不进行身份验证,则停止并呈现登录页面”)在处理请求的早期就完成了,而业务逻辑(即“如果用户具有此许可权则发生这种情况,否则会发生”)在“C”( Controller )中处理。

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

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

    关于PHP-将RBAC和身份验证放在MVC应用程序中的什么位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39147058/

    10-10 10:53