我正在实施一个类来管理我的网站上的用户权限。棘手的类设计问题
例如:员工可以查看客户记录,但没有别的,雇主可以查看客户以及管理员工,管理员既可以做这些事情,也可以管理雇主。
到目前为止,我所得到的是:
我已经存储的权限列表,如
addCustomer
,delCustomer
等每个权限被链接到用户角色的列表,它被允许执行该操作。我已经建立了一个简单的权限类。我使用的是这样的:
if($ permissions-> can('addCustomer')) echo“Add Customer”; else echo'不允许添加客户';
然而,棘手的部分是,在一些地方,我需要更具体。例如:客户已获得许可:readMsgs
,允许他阅读他和员工之间的消息。但是,如果他有这个权限,那么他就可以简单地从改变网址:
site.com/messages/read/100
到
site.com/messages/read/101
而且读消息#101为好,这可能是另一种客户和员工之间。除了自己之外,客户不应该能够阅读任何人的消息。
同样,客户已经拿到了editCustomer
许可,允许他前往编辑自己的个人资料:
site.com/customers/99
(其中99是其客户ID)
但如果他去 site.com/customers/100
他不应该被允许访问该页面。
我该如何解决这个问题?理想情况下,我希望能够将ID传递给权限类。例如:
if (! $permissions->can('readMsg', $msgId))
echo 'not allowed';
if (! $permissions->can('editCustomer', $requestedCustomerId))
echo 'not allowed';
任何想法我将不得不重构我的类结构以允许上述类型的东西?
我知道Java,所以随时输入,如果那会更容易。但问题是,班级如何知道它是否要求从员工X读取消息给客户X,或者是否要求编辑客户X的个人资料?在这两种情况下,一旦类知道它是哪一个,它就可以检查当前用户是否是客户Y,在这种情况下请求将被拒绝。 – 2011-04-23 00:20:50
我不确定我是否了解后续问题的性质。你的请求如何不知道? 'messages/read/XYZ'很清楚地定义了行为。 – corsiKa 2011-04-23 01:41:37