绑定访问控制类与权限
前面在讲函数型接口时,提到权限检查用checkAuth函数来实现。
在对象型接口中,通过绑定访问控制类与权限,来实现不同角色通过不同的类来控制。
比如前例中ApiLog对象接口允许员工登录(AUTH_EMP)后访问,只要定义:
class AC2_ApiLog extends AccessControl
{
...
}
那么为什么AC2前缀对应员工权限呢?
在api.php中,我们查看一个重要回调函数onCreateAC
,由它来实现类与权限的绑定:
function onCreateAC($tbl)
{
$cls = null;
if (hasPerm(AUTH_USER))
{
$cls = "AC1_$tbl";
if (! class_exists($cls))
$cls = "AC_$tbl";
}
else if (hasPerm(AUTH_EMP))
{
$cls = "AC2_$tbl";
}
return $cls;
}
该函数传入一个表名(或称对象名,比如”ApiLog”),根据当前用户的角色,返回一个类名,比如”AC1_ApiLog”,”AC2_ApiLog”这些,如果返回null,则框架尝试使用类”AC_ApiLog”。
如果发现指定的类不存在,则不允许访问该对象接口。
在该段代码中,定义了用户登录后用”AC1”前缀的类,如果类不存在,可以再尝试用”AC”前缀的类,如果再不存在则不允许访问接口;
如果是员工登录,则只用”AC2”前缀的类,如果类不存在,则不允许访问接口。
关于hasPerm的用法及权限定义,可以参考前面章节“权限定义”及“登录与退出”。