/** * @return \EE_Default_Where_Conditions */ protected function _generate_restrictions() { //if there are no standard caps for this model, then for now all we know //if they need the default cap to access this if (!$this->model()->cap_slug()) { return array(EE_Restriction_Generator_Base::get_default_restrictions_cap() => new EE_Return_None_Where_Conditions()); } $restrictions = array(); //does the basic cap exist? (eg 'ee_read_registrations') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action())) { $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action())] = new EE_Return_None_Where_Conditions(); //does the others cap exist? (eg 'ee_read_others_registrations') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action() . '_others')) { //both caps exist $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others')] = new EE_Default_Where_Conditions(array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder)); //does the private cap exist (eg 'ee_read_others_private_events') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action() . '_private') && $this->model() instanceof EEM_CPT_Base) { //if they have basic and others, but not private, restrict them to see theirs and others' that aren't private $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_private')] = new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_private') => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, 'status' => array('!=', 'private')))); } } } else { //there is no basic cap. So they can only access this if they have the default admin cap $restrictions[EE_Restriction_Generator_Base::get_default_restrictions_cap()] = new EE_Return_None_Where_Conditions(); } return $restrictions; }
/** * * @return \EE_Default_Where_Conditions * @throws EE_Error */ protected function _generate_restrictions() { //if there are no standard caps for this model, then for now all we know //if they need the default cap to access this if (!$this->model()->cap_slug()) { return array(EE_Restriction_Generator_Base::get_default_restrictions_cap() => new EE_Return_None_Where_Conditions()); } return array(EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action()) => new EE_Return_None_Where_Conditions(), EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_system') => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_system') => array($this->_system_field_name => array('IN', array('', 0)), $this->_system_field_name . '*' => array('IS_NULL'))))); }
/** * @return \EE_Default_Where_Conditions */ protected function _generate_restrictions() { //if there are no standard caps for this model, then for now all we know is //if they need the default cap to access this if (!$this->model()->cap_slug()) { return array(EE_Restriction_Generator_Base::get_default_restrictions_cap() => new EE_Return_None_Where_Conditions()); } return array(EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action()) => new EE_Return_None_Where_Conditions(), EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others') => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others') => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, $this->_global_field_name => true))), EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_global') => new EE_Default_Where_Conditions(array($this->_global_field_name => false))); }
/** * * @return \EE_Default_Where_Conditions */ protected function _generate_restrictions() { //if there are no standard caps for this model, then for now all we know //if they need the default cap to access this if (!$this->model()->cap_slug()) { return array(self::get_default_restrictions_cap() => new EE_Return_None_Where_Conditions()); } $event_model = EEM_Event::instance(); return array(EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action()) => new EE_Default_Where_Conditions(array($this->_path_to_event_model . 'status' => 'publish')), EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_others') => new EE_Default_Where_Conditions(array('OR*' . EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_others') => array($this->_path_to_event_model . 'EVT_wp_user' => EE_Default_Where_Conditions::current_user_placeholder, $this->_path_to_event_model . 'status' => 'publish'))), EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_private') => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_private') => array($this->_path_to_event_model . 'EVT_wp_user' => EE_Default_Where_Conditions::current_user_placeholder, $this->_path_to_event_model . 'status' => array('!=', 'private'))))); }
/** * @return EE_Default_Where_Conditions * @throws EE_Error */ protected function _generate_restrictions() { //if there are no standard caps for this model, then for now all we know //if they need the default cap to access this if (!$this->model()->cap_slug()) { return array(self::get_default_restrictions_cap() => new EE_Return_None_Where_Conditions()); } $event_model = EEM_Event::instance(); $restrictions = array(EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action()) => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action()) => array($this->_default_field_name => true, $this->_path_to_event_model . 'status' => 'publish'))), EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_others') => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_others') => array($this->_path_to_event_model . 'EVT_wp_user' => EE_Default_Where_Conditions::current_user_placeholder, $this->_default_field_name => true, $this->_path_to_event_model . 'status' => 'publish'))), EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_private') => new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($event_model, $this->action() . '_private') => array($this->_path_to_event_model . 'EVT_wp_user' => EE_Default_Where_Conditions::current_user_placeholder, $this->_path_to_event_model . 'status' => array('!=', 'private'), $this->_default_field_name => true))), EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_default') => new EE_Default_Where_Conditions(array($this->_default_field_name => false))); if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action() . '_others_default')) { //if they don't have the "others" default capability, restrict access to only their default ones, and non-default ones $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others_default')] = new EE_Default_Where_Conditions(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others_default') => array('AND' => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, $this->_default_field_name => true), $this->_default_field_name => false))); } return $restrictions; }
function test_generate_restrictions__basic_and_others_and_private() { //currently events have the 'ee_read_events', 'ee_read_others_events', and 'ee_read_others_private_events' caps //if that changes, this will need to be updated $generator = new EE_Restriction_Generator_Protected(); $generator->_construct_finalize(EEM_Event::instance(), EEM_Base::caps_read); $restrictions = $generator->generate_restrictions(); foreach ($restrictions as $default_where_conditions) { $default_where_conditions->_finalize_construct(EEM_Event::instance()); } $this->assertArrayHasKey('ee_read_events', $restrictions); $this->assertInstanceOf('EE_Return_None_Where_Conditions', $restrictions['ee_read_events']); $this->assertArrayHasKey('ee_read_others_events', $restrictions); $this->assertInstanceOf('EE_Default_Where_Conditions', $restrictions['ee_read_others_events']); $this->assertEquals(array(EEM_Event::instance()->wp_user_field_name() => get_current_user_id()), $restrictions['ee_read_others_events']->get_default_where_conditions()); $this->assertArrayHasKey('ee_read_private_events', $restrictions); $this->assertInstanceOf('EE_Default_Where_Conditions', $restrictions['ee_read_private_events']); $this->assertEquals(array('OR*no_' . EE_Restriction_Generator_Base::get_cap_name(EEM_Event::instance(), 'read_private') => array(EEM_Event::instance()->wp_user_field_name() => get_current_user_id(), 'status' => array('!=', 'private'))), $restrictions['ee_read_private_events']->get_default_where_conditions()); $this->assertEquals(3, count($restrictions)); }
protected function _generate_restrictions() { //if there are no standard caps for this model, then for allow full access if (!$this->model()->cap_slug()) { return array(); } $restrictions = array(); //does the basic cap exist? (eg 'ee_read_registrations') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action())) { if ($this->model() instanceof EEM_CPT_Base) { $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action())] = new EE_Default_Where_Conditions(array('status' => 'publish')); } elseif ($this->model() instanceof EEM_Soft_Delete_Base) { $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action())] = new EE_Default_Where_Conditions(array($this->model()->deleted_field_name() => false)); } else { //don't impose any restrictions if they don't have the basic reading cap } //does the others cap exist? (eg 'ee_read_others_registrations') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action() . '_others')) { //both caps exist if ($this->model() instanceof EEM_CPT_Base) { //then if they don't have the others cap, AT MOST show them their own and other published ones $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others')] = new EE_Default_Where_Conditions(array('OR*' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others') => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, 'status' => 'publish'))); } elseif ($this->model() instanceof EEM_Soft_Delete_Base) { //then if they don't have the other cap, AT MOST show them their own or non deleted ones $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others')] = new EE_Default_Where_Conditions(array('OR*' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_others') => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, $this->model()->deleted_field_name() => false))); } else { //again, if they don't have the others cap, continue showing all because there are no inherently hidden ones } //does the private cap exist (eg 'ee_read_others_private_events') if (EE_Restriction_Generator_Base::is_cap($this->model(), $this->action() . '_private') && $this->model() instanceof EEM_CPT_Base) { //if they have basic and others, but not private, restrict them to see theirs and others' that aren't private $restrictions[EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_private')] = new EE_Default_Where_Conditions(array('OR*' . EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action() . '_private') => array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder, 'status' => array('!=', 'private')))); } } } else { //there is no basic cap. So allow full access $restrictions = array(); } return $restrictions; }
function test_get_cap_name() { $this->assertEquals('ee_edit_events', EE_Restriction_Generator_Base::get_cap_name(EEM_Event::instance(), 'edit')); $this->assertEquals('ee_read_private_venues', EE_Restriction_Generator_Base::get_cap_name(EEM_Venue::instance(), 'read_private')); }
/** * @return \EE_Default_Where_Conditions */ protected function _generate_restrictions() { return array(EE_Restriction_Generator_Base::get_cap_name($this->model(), $this->action()) => new EE_Default_Where_Conditions(array(EE_Default_Where_Conditions::user_field_name_placeholder => EE_Default_Where_Conditions::current_user_placeholder))); }