尝试通过 REST 登录时,我只是添加了:
if ($this->RequestHandler->isXML()) {
$this->Auth->authenticate = array('Basic');
}
到我的插件 AppController。当我通过休息客户端请求时,我得到: DbAcl::check() - 权限检查中的 ARO/ACO 节点查找失败。
随着我的用户对象被转储。奇怪,它似乎让我登录但没有正确读取权限?
尝试通过 REST 登录时,我只是添加了:
if ($this->RequestHandler->isXML()) {
$this->Auth->authenticate = array('Basic');
}
到我的插件 AppController。当我通过休息客户端请求时,我得到: DbAcl::check() - 权限检查中的 ARO/ACO 节点查找失败。
随着我的用户对象被转储。奇怪,它似乎让我登录但没有正确读取权限?
这里您似乎缺少一件基本的事情:身份验证和授权是两件不同的事情。
身份验证是通过提供的凭据来识别用户并确保用户是他们所说的那个人的过程。这通常使用用户名和密码来完成。
授权是确保允许当前用户访问特定资源的过程。
您收到的错误是 Authorization 错误,我告诉您您正在尝试使用ACL。您对该问题的解决方法是配置基于控制器的授权,并通过它允许管理员访问所有内容。基于控制器的授权与 ACL 授权无关。检查提供的链接。
AuthComponent实现了 3种不同类型的Authentication:
FormAuthenticate - 允许您根据表单 POST 数据对用户进行身份验证。通常这是用户输入信息的登录表单。
BasicAuthenticate - 允许您使用基本 HTTP 身份验证对用户进行身份验证。
DigestAuthenticate - 允许您使用 Digest HTTP 身份验证对用户进行身份验证。
如果您正在开发REST 服务,我建议您使用Digest Authentication作为“最好的”,但它仍然取决于您登录的内容。
当我添加时:
$this->Auth->authorize = array('Controller');
并实现了 isAuthorized 方法:
public function isAuthorized($user) {
if (isset($user['role_id']) && $user['role_id'] == 1) {
return true; //Admin can access every action
}
return false; // The rest don't
}
有效。