【问题标题】:How do I restrict a users access to an object?如何限制用户访问对象?
【发布时间】:2010-02-25 20:50:26
【问题描述】:

嗨,Sitepoint 向导人,

假设我们有一个拥有多个用户和各种对象的管理应用程序。我想做的是控制对象本身的访问——也就是说,它对一种类型的用户以一种方式运行,而对其他用户则以另一种方式运行。比如……

导演 Mike 可以覆盖接待用户 Sally 的注册日期。人们会假设迈克可以设置过去或未来的任何日期。然后我们有 Payroll 用户 Steve,他也可以修改 Sally 的注册日期,但仅限于过去(例如)一年前的日期。为了让事情更有趣,我们还有人力资源经理 Mary,她也可以修改 Sally 的注册日期,但仅限于从 2007 年 6 月 23 日到现在一个月后的日期...

如何对访问限制进行编程,以便在前端,表单控件受到最小和最大日期的限制,而在后端,验证器检查输入的日期以确保它位于这些日期之间?我显然需要能够调整每种用户类型的最小和最大日期。其他对象可能有不同的参数 - 例如,折扣字段的最大金额或加班的星期几。

我以不同的方式问过这个问题,但每次我都被实施所困扰。我目前正在将其开发为基于 php/MySQL 的 Web 应用程序,但非常欢迎来自其他平台的想法和 cmets!这次我看的是第一原则,所以不管你的背景是什么,如果你有什么想法,请告诉我!您甚至将这种访问控制称为什么...?

【问题讨论】:

  • 如果您的问题得到解决,请让 sur 标记为已回答。

标签: model-view-controller authorization access-control


【解决方案1】:

根据您的应用程序的基础,您可以在应用程序启动时要求提供凭据,并且根据需要访问权限的人员,您可以加载包含不同设置的不同 xml 文件。

至于安全问题,请确保用户无法访问不同的xml文件。

编辑:
由于您使用的是 MySQL,因此您可以执行以下操作。
假设您有一个包含以下字段的用户表:UserId、UserName、RestrictionId。
并且有一个限制表,如下所示:RestrictionId、FieldName、FieldCondition。

这样,在您的 php 应用程序中,当用户通过身份验证时,您可以在该字段上获取正确的“限制”并将它们应用到您的代码中。如果您有多个字段需要不同的规则,那么您只需使用正确的 RestrictionId 添加它们。

这个数据库设计远非完美,我敢肯定你可以做得更好

【讨论】:

  • 您是否有任何链接指向如何构建 xml 文件的示例?我可能会使用数据库,但原理是一样的。谢谢
  • 为 DB 添加了一个示例。
  • 感谢您的编辑 - 如果我能在某处看到这种类型的东西在运行,我会感觉更舒服 - 你知道任何已经这样做的脚本、框架、应用程序,以便我可以检查出来了吗?
  • 不。对不起。但我认为实施起来不会太难。
【解决方案2】:

因为,您已经在使用 MySql 数据库了。您可以在 DB 本身中维护 UserRole Master 表的详细信息。根据登录加载用户角色数据,然后您可以轻松验证用户所做的更改。

【讨论】:

  • 感谢您的回复 - 您对如何存储角色数据有任何指示吗?我习惯在我的数据库中使用布尔类型 ALLOW/DENY,所以我如何在我的数据库中存储 ALLOW/DENY 和“-1 年”、“2007-06-23”、“
猜你喜欢
  • 2019-06-09
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
相关资源
最近更新 更多