2011-11-22 74 views
1

是否有简单的方法来获取特定用户的凭证/权限?访问用户凭证/权限

我见过hasCredential()方法,但我想动态检查任何用户,而不仅仅是当前用户。

我知道我可以使用sfContext::getInstance()->getUser();来获得当前的用户对象,但有没有办法加载任何用户并获得他/她的凭据?

感谢

回答

0

它的种类取决于您使用的“商店”。在Symfony中,当前用户(与sfContext::getInstance()->getUser()一起提供的那个用户)更多地是该会话的抽象。

因此,最常用的身份验证插件sfDoctrineGuard具有控制器(sfGuardAuth),它们处理登录表单等事情,一旦成功完成,它将相应地填充sfUser

所以,如果你想检查用户的权限,你将不得不检查底层商店。如果您使用的是sfDoctrineGuard,则可以通过sfGuardUserTable::getInstance()->find(...)检索用户模型。在sfGuardUser上,您可以拨打hasPermission($name)函数进行检查。

+0

我的用户设置是,我有一个管理员和一个管理员。管理员有几个主持人。我想要做的是检查我登录的主持人的父管理员的凭据。所以理想情况下,我需要得到crrent用户(很简单),但然后得到它的管理关系,并获得管理员的凭据 – terrid25

+0

像这样:'$ user = sfContext :: getInstance() - > getUser(); $ user-> getProfile() - > getAdmin() - > getUser() - > hasCredential('Can.Delete');'但显然这不起作用 – terrid25

+0

你使用sfDoctrineGuard吗?如果是这样,你可以使用'$ user-> getUserModel() - > getAdmin() - > hasPermission('Can.Delete')'。你只需要在'sfGuardUser'模型中定义'getAdmin()'函数(如果它不是已经存在的关系)。 –

0

如果您正在使用sfGuardPlugin或sfDoctrineGuardPlugin您可以通过调用getAllPermissions()里面的行动得到所有用户的权限:

$this->getUser()->getGuardUser()->getAllPermissions(); 

或内部型号:

sfContext::getInstance()->getUser()->getGuardUser()->getAllPermissions(); 

无论哪种方式您必须致电getGuardUser

0

如果您使用的是sfGuardPlugin,则您的数据库中有sf_guard_user,sf_guard_permissionsf_guard_group表。所以,你可以查询表,以获得特定用户的权限做这样的事情:

$c = new Criteria(); 
$c->add('username',$specificName); 

$userPeer = new sfGuardUserPeer(); 
$user = $userPeer->doSelect($c); 

$credentials = $user->getPermissions(); 

$credentials这样你将有选择的所有权限的数组(权限是在sfGuardPlugin凭据)用户。

祝你好运