在sfDoctrineGuardPlugin中是:
sfGuardUser:
actAs: [Timestampable]
columns:
first_name: string(255)
last_name: string(255)
//
indexes:
is_active_idx:
fields: [is_active]
relations:
Groups:
class: sfGuardGroup
local: user_id
foreign: group_id
refClass: sfGuardUserGroup
foreignAlias: Users
sfGuardGroup:
actAs: [Timestampable]
columns:
name:
type: string(255)
unique: true
description: string(1000)
relations:
Users:
class: sfGuardUser
refClass: sfGuardUserGroup
local: group_id
foreign: user_id
foreignAlias: Groups
sfGuardUserGroup:
options:
symfony:
form: false
filter: false
actAs: [Timestampable]
columns:
user_id:
type: integer
primary: true
group_id:
type: integer
primary: true
relations:
User:
class: sfGuardUser
local: user_id
onDelete: CASCADE
Group:
class: sfGuardGroup
local: group_id
onDelete: CASCADE
这是多对多的关系,我如何获得所有用户组?
- @method Doctrine_Collection
getGroups()返回 当前记录的“群组”集合
我做:
$this->groups = $this->getUser()->getGuardUser()->getGroups();
这个回报:
Doctrine_Collection data : Array( )
如何检查用户是否在群组TEST上?
感谢您的帮助!
答案 0 :(得分:1)
您可以尝试使用查询来查找用户组:
$user_id = $this->getUser()->getGuardUser()->getId();
$groups = Doctrine_core::getTable('sfGuardGroup')->create_query('g')->innerJoin('g.users u with u.id= ?', $user_id);
答案 1 :(得分:1)
请参阅sfGuardSecurityUser类:https://github.com/Garfield-fr/sfDoctrineGuardPlugin/blob/master/lib/user/sfGuardSecurityUser.class.php
if ($this->getUser()->hasGroup('TEST')) {
//if user is on group TEST
}//end if
// get all groups
$userGroups = $this->getUser()->getGroups();