我希望一些可以帮助我一点,我目前正在开发我的第一个网站使用PHP框架,网站的一部分是分裂成一个会员区,这是我的困惑开始浮出水面,随着成员区,我希望普通成员能够添加新的评论和编辑有自己的评论,足够简单,我可以只检查海报名称,在会议中存储的用户名,我的困惑来自于区分“普通”用户和更高级别的用户谁有能力删除和修改任何评论等,他们也应该能够访问网站的管理部分。
我的问题是,是否所有用户都应该通过相同的Zend_Auth控制器登录,或者是否应该为每种类型的用户分别使用Zend_Auth控制器,或者所有这些都可以使用Zend_Acl来处理吗?任何帮助、建议、文章或教程都将不胜感激。就我个人而言,我认为Zend文档在某些类上有点生疏。
提前感谢
sico87
发布于 2009-01-22 15:06:36
我推荐Manning Publications的"Zend Framework in Action“这本书,作为对此的最新介绍。它以PDF下载的形式提供,所以您现在可以使用它:)
但要回答这个特别的问题:
让我们从定义两个关键术语开始。Zend_Auth中的“身份验证”指的是身份验证,它证明某人是他们所说的那个人(即登录)。Zend_Acl中的"A“指的是授权,它证明某人有权做他们想要做的事情(即访问控制)。
假设用户只有一个角色...将用户的角色存储在您作为Zend_Auth的一部分获得的“身份”中。登录时:
$auth = Zend_Auth::getInstance();
$identity = new stdClass();
$identity->user_pk = $user->getPrimaryKey();
$identity->user_name = $user->getName();
$identity->role = $user->getRole(); // select * from user_role where user_pk=xxx
$auth->getStorage()->write($identity);
在控制器中:
$acl->add(new Zend_Acl_Resource('news'))
->allow('defaultRole', 'news');
默认情况下,所有内容都被拒绝,因此您实际上不需要指定:
->deny('defaultRole', 'news', 'add');
在控制器的代码中进一步介绍:
$identity = Zend_Auth::getInstance()->getIdentity();
if(!$acl->isAllowed($identity->role, 'news', 'add'))
{
header('Location: http://www.yoursite.com/error/unauthorized');
}
如果用户的身份不被允许做“新闻->添加”,它会将他们重定向到未授权的页面(假设您已经创建了这样一个页面)。
如果用户有一个以上的角色,您将在他们的身份中存储一组角色。那么你的支票应该是这样的:
$identity = Zend_Auth::getInstance()->getIdentity();
$isAllowed = false;
foreach($identity->role as $role)
{
if($acl->isAllowed($role, 'news', 'add'))
{
$isAllowed = true;
}
}
if(!$isAllowed)
{ // if NO ROLES have access, redirect to unauthorized page
header('Location: http://www.yoursite.com/error/unauthorized');
}
希望这能有所帮助。
发布于 2009-01-22 14:15:21
是的,在大多数情况下,您的所有身份验证都应该通过同一个控制器。但是,Zend Auth不是控制器类型。Zend Auth是一种API,用于利用常见的身份验证方法,如数据库或http。它的工作实际上只是对编写身份验证代码这一繁琐的工作进行包装。
Zend Acl是用于区分普通用户和特权用户的Acl。只有在用户通过身份验证并登录后,才会涉及Zend Acl。
您需要的大部分内容都在ZF文档中。我阅读了几乎所有关于Auth和Acl的文档,直到它对我有了很大的意义。尽管ZF的Auth、ACL、Storage_*和其他类非常紧密地结合在一起使用,但它们都具有非常不同的用途。稍等片刻,您就会发现它们彼此之间建立得很好。
以下是帮助您入门的几个链接:
Pádraic Brady's ZF Tutorial
Zend's DevZone article on ACL and MVC
发布于 2009-11-08 06:39:30
我能理解你为什么会感到困惑。我当时/现在还有点困惑。所以,很遗憾,我不能直接回答你的问题。但是,为了澄清我头脑中所有这些东西,我正在做的一件事是从“域对象”的角度来思考,而不是数据库记录。
我处理这个问题的策略是创建我自己的Auth Adaptor,它与用户凭据一起传递一个“user Base Object”。我的“用户基础”有点像是用户的仓库。
因此,Zend Auth是其他Zend组件的“接口”,而我仍然可以更多地控制我的系统来存储和访问“用户”。我的User_Base类可以是Zend Db tbl的包装器,甚至可以只包含一些用于测试的硬代码。
所以大体上-
只需保持一切简单,并随着您了解更多信息而慢慢进行。
不管怎样,这就是我要做的。
我甚至不会费心使用Zend ACL,直到我头脑中的Auth清楚了。
我正在改造一个遗留站点,并将其转换为Zend MVC
为了让我的“模型”发挥作用,我必须掌握一些东西(可能是非常规的)。:
user_accounts是两个不同的东西。不要试图将它们混合在一个概念中,因为它可能会得到complicated.
应用程序不会害怕让这些应用程序使用存储在例如“共享模型”文件夹中的模型对象,只有与单个应用程序直接相关的模型代码位于/
了
好的,我开始ramble....but了,你明白了。不要让您看到的Zend_Auth+Zend Db教程左右您自己的模型。它们只是一些简化的例子。
努夫说
https://stackoverflow.com/questions/468863
复制相似问题