如何限制用户对对象的访问?

时间:2010-02-23 13:01:35

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

Hi Sitepoint向导人员,

假设我们有一个拥有多个用户和各种对象的管理应用程序。我想要做的是控制对象本身内的访问 - 也就是说,它对一种类型的用户表现出一种方式,对另一种用户则表现另一种方式。例如......

  

导演Mike可以覆盖接收用户Sally的注册日期。人们会认为迈克可以在过去或将来设定任何日期。然后我们有Payroll用户Steve,他也可以修改Sally的注册日期,但仅限于过去的日期,直到(例如)一年前。为了增加趣味,我们有人力资源经理玛丽,他也可以修改莎莉的注册日期,但仅适用于从2007年6月23日到现在一个月之后的日期......

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

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

2 个答案:

答案 0 :(得分:1)

根据应用程序的基础,您可以在应用程序启动时询问凭据,并根据谁需要访问权限,您可以加载包含不同设置的其他xml文件。

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

修改
既然你使用MySQL就可以做到这样的事情。
假设您有一个包含这些字段的用户表:UserId,UserName,RestrictionId。
并使用限制表,如下所示:RestrictionId,FieldName,FieldCondition。

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

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

答案 1 :(得分:0)

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