您正在为营销部门构建Web应用程序。市场营销 部门已经要求建立一个博客平台,以便他们能够留住您的客户 最新的公司新闻。您决定构建传统的MVC 带有关系数据库的Web应用程序。你选择了一个LAMP(Linux Apache PHP MySQL)堆栈或类似。
营销团队的要求非常简单。他们想要:
根据这些要求,您决定实施RBAC(基于角色的访问) 控制)。您将角色定义为:
您还创建了一个“帖子控制器”,它有五个动作:
最后,您设置了一个身份验证系统。认证系统将 始终返回您实施的角色之一。如果用户已登录 你会得到一个“经理”或“营销人员”(取决于他们的工作 在你的公司内)。如果用户未登录,您将返回“访客”。
开发进展顺利,直到您开始实施授权 “更新”行动。
此网站中的“更新”操作应在何处进行授权 应用
请确保不要混淆身份验证(检查用户是否已登录) 通过授权确定他们是谁(检查用户是否允许) 做他们想做的事。)
模特。
行动。
动作和模型。
其他地方。
答案 0 :(得分:0)
根据我的经验,当您考虑授权管理时,您必须经常考虑将 Aspect 理解为 AOP 范例(或类似内容)的元素。因此,它可以保持在所有应用程序层之上,但采用非侵入式方法。
谈论哪里应该放置授权管理我认为它必须放在一个共同的地方,在那里你的“行动终点”将被调用和管理。例如,如果您有rest或soap api,则可以将所有授权管理放入第一个请求处理程序之一,以便在调用每个控制器操作之前拒绝未经授权的用户。
回到具有3层的简单MVC应用程序,您可以定义在每个控制器操作之前调用的AuthManager
。
如果您的授权管理涉及一些视图动态修改,则应使用不同且更具侵入性的方法,但这是一个不同的问题。
答案 1 :(得分:0)
经过大量的搜索和研究后,我想我找到了自己问题的答案。
满足我需要实现“基于属性的访问控制”(缩写为ABAC)的要求。它也被称为“基于声明的访问控制”和“基于策略的访问控制”。
ABAC使用四个输入来决定是否允许当前用户执行他们正在尝试执行的操作。四个输入是:
检查应该在行动中发生。这是一个快速的PHP伪代码示例:
min
应该明白为什么它需要在行动中发生;没有资源(上例中的帖子)要反对检查!