2013-02-21 3 views
1

Symfony 1.4 백엔드를 사용하여 다른 권한을 가진 사용자가 포함 된 sfGuardUser Plugin으로 사용자를 생성/업데이트합니다.Admin에서 자동 생성 된 선택 필드의 내용을 필터링하는 방법은 무엇입니까?

sfGuardUser와 1-1 관계가있는 다른 테이블을 사용하고 있습니다. 이 테이블에서 나는 자신의 사용 권한으로 구분 된 특정 유형의 사용자에 관련된 정보를 저장합니다.

Symfony는 작업을 완료했으며 sfGuardUser에 저장된 모든 사용자로 선택 필드를 생성했습니다.

특정 권한을 가진 sfGuardUsers 만 표시하려면이 목록을 필터링하고 싶습니다.

많은 기사가 백엔드에서 특정 필터를 만드는 방법에 대한 ressources가 있지만 내 문제를 해결하는 방법은 없습니다.

+0

이 * 특정 권한은 동적이어야합니까? – j0k

+0

권한이 동적이 아닙니다. 관련 표에는 특정 권한 (실제로는 전용 응용 프로그램 및 모듈이있는 사용자 유형)에 대한 특정 정보가 있습니다. @Michal의 대답은 좋은 것 같습니다. 내일 다시 확인하겠습니다. 감사 ! –

답변

1

정확히 내가 무엇을 찾고 있었습니까.

lib에

/모델/교리/sfDoctrineGuardPlugin/sfGuardUserTable.class.php 애플 리케이션에서

public function retrieveForPermissionX() 
{ 
    return $this->createQuery('u') 
      ->leftJoin('u.sfGuardUserPermission up') 
      ->innerJoin('u.Permissions p') 
      ->where('p.name = "PermissionX"') 
      ->orderBy('u.first_name ASC');    
} 

/your_app_name/모듈/your_module_name :보다 자세한 조로 나는 쿼리 및 코드에 대한 몇 가지 수정을했습니다 /actions/actions.class.php

public function executeNew(sfWebRequest $request) 
{ 
    $this->table_client = new tableClient(); 
    $this->form = new TableClientForm($this->table_client); 

    $widgetSchema = $this->form->getWidgetSchema(); 
    $widgetSchema['sf_guard_user_id']->setOption('table_method', 'retrieveForPermissionX'); 
} 
1

@j0k 님의 질문은 중요합니다. 항상 동일한 권한이 필요한 경우 원하는 것을 성취하는 것이 매우 쉽습니다. 권한이 동적이 되려면 솔루션이 약간 까다로워집니다.

앞의 경우 sgGuardUser와 관련된 테이블에 대한 백엔드 작업 (신규 및 수정)에서 사용되는 Form 클래스를 편집해야합니다. (가) sfGuardUserTable.class.php 추가해야합니다에 그런

$this->widgetSchema['user_id']->setOption('table_method' => 'retrieveForPermissionX'); 

: (관계 열이 user_id이라고 가정하고 교리를 사용하고 있는지) : You'l 사용자의 목록을 검색 할 책임이 선택 위젯을 편집해야 적절한 쿼리를 준비하는 함수 :

public function retrieveForPermissionX() 
{ 
    return $this->createQuery('u') 
     ->innerJoin('u.sfGuardUserPermission up') 
     ->innerJoin('u.Permissions p') 
     ->where('p.name = "PermissionX"') 
     ->orderBy('u.first_name ASC'); 
} 

내가 말했듯이 다른 권한을 사용해야하는 경우 더 까다로워집니다. 기본 사항은 동일합니다. 양식 안의 위젯에 적절한 사용자를 선택해야하지만, 사용 권한을 양식에 어떻게 든 말해야합니다.

자동 생성 된 새 동작 및 수정 동작을 무시해야한다고 생각합니다. URL에 paramater으로 필요한 권한을 통과 (또는 당신이 필요로 주어진 권한에 대한 특정 URL을 사용)하고 동작 내부 폼에 옵션으로 권한을 전달합니다

$this->form = new UserInfoForm(null, array('permissions' => $permissions)); 

는 그런 다음 적절한 호출이 정보를 사용할 수 있습니다 table 메소드를 선택하거나 위젯에 대한 오브젝트를 검색하는 데 사용될 조회 오브젝트를 전달할 수있는 테이블 메소드에 대한 대안으로 조회 오브젝트를 생성하십시오.

+0

나는 [@ Yann] (http : // stackoverflow.com/users/1011550/yann-kastelnik)은'retrieveForPermissionX()'함수 내에서 릴레이션 이름에 관해 이야기합니다. –

관련 문제