2016-06-02 5 views
2

저는 체육관 프로젝트를 진행하고 있습니다. 페이지 유형이 GymLocationPage입니다.그룹 회원을 기반으로 특정 페이지 유형에 대한 액세스를 제한하는 중입니까?

모든 체육관에는 관리자가 직접 추가 한 GymLocationPage가 있습니다. 모든 체육관에는 각 체육관 관리자마다 로그인 할 수 있습니다. 보안 영역에서 회원이 생성되면 Gym Manager이라는 그룹을 만들어이 그룹에 추가했습니다.

가있는 체육관 관리자 로그, 난 단지 그들을보고 편집 할 수 있도록하려는 경우

등 자신의 체육관 GymLocationPage 및 다른 페이지/모델 관리자가 어떻게 특정와 함께이 일을 가야합니까 현재 로그인 한 사용자가 특정 체육관의 페이지 만 편집 할 수 있도록합니다.

예컨대

새로운 요크 체육관 매니저 => 그는 단지 (체육관 위치 또는 다른 페이지 등 다른 볼 수 없습니다) 뉴욕의 체육관 위치 페이지에 액세스 할 수 있습니다. 존


는 캘리포니아의 체육관 매니저 => 그는 단지 (체육관 위치 또는 다른 페이지 등 다른 볼 수 없습니다) 캘리포니아의 체육관 위치 페이지에 액세스 할 수 있습니다.

답변

2

실버 스트라이프는 꽤 좋은 permission management을 가지고 있습니다. 코드에서 사용 권한을 만들고 수동으로 사용자 그룹에 추가 할 수 있습니다. 데이터 객체 또는 페이지 유형에

<?php 
class Foo extends DataObject implements PermissionProvider 
{ 

    /** 
    * Return a map of permission codes to add to the dropdown 
    * shown in the Security section of the CMS. 
    * array(
    * 'VIEW_SITE' => 'View the site', 
    *); 
    */ 
    public function providePermissions() 
    { 
     return [ 
      'FOO_MANAGE' => [ 
       'name' => _t('FOO.PERMISSION_MANAGE_DESCRIPTION', 'Create, edit and delete Foo Items'), 
       'category' => _t('Permissions.FOO_CATEGORY', 'Foo'), 
      ], 
      'FOO_CREATE' => [ 
       'name' => _t('FOO.PERMISSION_CREATE_DESCRIPTION', 'Create Foo Items'), 
       'category' => _t('Permissions.FOO_CATEGORY', 'Foo'), 
      ] 
     ]; 
    } 
} 

당신은 다음 ... 등을 삭제, 편집 할 수 있습니다 볼 수있는 사용자 정의 할 것을 다른 can 방법을 확인할 수 있습니다.

canView()은 프론트 엔드의 페이지에 액세스하기위한 것이며, 백엔드에서 편집하려면 canEdit()입니다.

/** 
* @param null $member 
* @return bool 
*/ 
public function canView($member = null) 
{ 
    //this method is for accessing/viewing the page. 
    return true; 
} 

/** 
* @param null $member 
* @return bool 
*/ 
public function canCreate($member = null) 
{ 
    $parent = parent::canCreate($member); 

    $manage = Permission::check('FOO_MANAGE', 'any', $member); 
    $create = Permission::check('FOO_CREATE', 'any', $member); 

    return $parent || $manage || $create; 
} 

/** 
* @param null $member 
* @return bool 
*/ 
public function canEdit($member = null) 
{ 
    $member = $member ?: Member::currentUser(); 
    $parent = parent::canCreate($member); 

    $manage = Permission::check('FOO_MANAGE', 'any', $member); 

    //you can check everyting here... 
    $owner = $member ? $this->OwnerID == $member->ID : false; 

    return $parent || $manage || $owner; 
} 

/** 
* @param null $member 
* @return bool 
*/ 
public function canDelete($member = null) 
{ 
    $parent = parent::canCreate($member); 

    $manage = Permission::check('FOO_MANAGE', 'any', $member); 

    return $parent || $manage; 

} 
+0

감사합니다.내가 지금 당장 머리를 쓰려고하는 것은 멤버를 특정 'GymLocationPage'에만 할당하는 것입니다. 예 : Bob은 뉴욕 체육관 체육관 관리자입니다. '체육관 관리자'그룹의 모든 회원에게 동일한 권한을 부여하면 체육관 위치 페이지를 볼 수있는 대신 다른 사람들이 볼 수 있습니다. – ifusion

2

내가 헬스 클럽 매니저 그룹 내 모든 구성원에게 동일한 권한을 부여한다면 그들은 모두 서로 체육관 위치 페이지를 볼 수 없습니다 대신 단지 자신을보고? 제대로 각 GymLocationPagecanXXX() 방법을 구현하는 경우

는 @wmk 위에서 당신을 위해 행하신되지 않음으로. 관련 Group에 대한 수표를 포함해야하지만 누락 된 부분은 각 페이지를 각 개별 Member 레코드와 연결하는 방법입니다.

class GymMemberExtension extends DataExtension 
{ 
    private static $has_one = array(
     'GymPage' => 'GymLocationPage' 
    ); 
} 

을 보장 .. 그리고 사용자 년대 Member.GymPageID 필드를 통해 올바른 GymLocationPage 사용자가 생성 될 때 채워 : 당신은 $has_one 관계에 따라서 GymLocationPageMember로 연장하여이를 달성 할 수있다.

Permission::check()에 두 번째 매개 변수가있어서 내가 전에 발견 한 적이없는 TBH를 고려해야합니다. Permission 테이블에 매우 특정한 유형의 항목을 허용하지만 이것이 야생에서 어떻게 사용되는지에 대한 예는 보지 못했습니다.

관련 문제