Oop 棘手的课堂设计问题

Oop 棘手的课堂设计问题,oop,design-patterns,class-design,Oop,Design Patterns,Class Design,我正在努力实现一个类来管理我网站上的用户权限 例如:员工可以查看客户记录,但除此之外没有其他功能;雇主可以查看客户,也可以管理员工;管理员可以管理雇主,也可以查看客户 到目前为止,我得到的是: 我存储了一个权限列表,例如addCustomer,delCustomer,等等。每个权限都链接到允许执行该操作的用户角色列表 我已经建立了一个简单的权限类。我是这样用的: 如果($permissions->can('addCustomer')) 回显“添加客户”; 其他的 echo“不允许添加客户”

我正在努力实现一个类来管理我网站上的用户权限

例如:员工可以查看客户记录,但除此之外没有其他功能;雇主可以查看客户,也可以管理员工;管理员可以管理雇主,也可以查看客户

到目前为止,我得到的是:

  • 我存储了一个权限列表,例如
    addCustomer
    delCustomer
    ,等等。每个权限都链接到允许执行该操作的用户角色列表

  • 我已经建立了一个简单的权限类。我是这样用的:

    如果($permissions->can('addCustomer')) 回显“添加客户”; 其他的 echo“不允许添加客户”

然而,棘手的是,在某些地方,我需要更具体一些。例如:客户已获得权限:
readMsgs
,允许他阅读自己与员工之间的消息。但是,如果他拥有该权限,那么他只需更改url即可:

site.com/messages/read/100

并阅读另一位客户和员工之间的信息#101。客户应该只能自己阅读任何人的信息

同样,客户已获得
editCustomer
权限,该权限允许他通过转到以下位置编辑自己的个人资料:

site.com/customers/99
(其中99是他的客户id)

但是如果他去 site.com/customers/100

他不应该被允许进入那个页面

我怎样才能解决这个问题?理想情况下,我希望能够将id传递给permissions类。例如:

if (! $permissions->can('readMsg', $msgId))
   echo 'not allowed';

if (! $permissions->can('editCustomer', $requestedCustomerId))
   echo 'not allowed';

你知道我该如何重组我的类结构来实现上述功能吗?

我会有一个带有
canRead(User)
功能的消息类。这将检查用户的权限并说“哦,我是经理给员工的消息。除非用户是消息的接收者,否则他们无法阅读。”或者同样简单地说“我是经理给员工的消息。用户是经理,所以他可以阅读。”


我用英语输入它是因为我喜欢php(这似乎是我的首选语言)。

我的权限分类会更精细(例如,“readOwnMsgs”与“readAnyMsg”)。这将详细说明您的权限检查代码(例如,site.com/messages/read/#######类似于“如果canReadAnyMsg或如果canReadOwnMsg且消息作者是当前用户则继续”),建议将此逻辑封装在单独的类中,并按资源类型或其他任何可能会影响做出此类决策所需的上下文信息的情况进行细分。

我了解Java,如果更容易的话,请随意键入。但问题是,类如何知道这是一个从雇员X向客户X读取消息的请求,还是一个编辑客户X概要文件的请求?在这两种情况下,一旦类知道它是哪一个,它就可以检查当前用户是否是客户Y,在这种情况下,请求将被拒绝。我不确定我是否理解您后续问题的性质。你的要求怎么会不知道<代码>消息/read/XYZ非常清楚地定义了行为。
if (! $permissions->can('readMsg', $msgId))
   echo 'not allowed';

if (! $permissions->can('editCustomer', $requestedCustomerId))
   echo 'not allowed';