From 73d86d59bfa76f3030a5dc5393138cad6c683443 Mon Sep 17 00:00:00 2001 From: weryques Date: Wed, 31 Jan 2018 11:06:46 -0200 Subject: [PATCH 1/5] Refactoring capabilities --- ...s-tainacan-rest-collections-controller.php | 21 ++++++-- ...class-tainacan-rest-filters-controller.php | 32 ++++++++++-- .../class-tainacan-rest-items-controller.php | 28 ++++++++-- ...lass-tainacan-rest-metadata-controller.php | 51 +++++++++++++++---- ...ss-tainacan-rest-taxonomies-controller.php | 22 ++++++-- .../class-tainacan-rest-terms-controller.php | 20 +++++++- tests/test-api-filters.php | 11 ++-- 7 files changed, 156 insertions(+), 29 deletions(-) diff --git a/src/api/endpoints/class-tainacan-rest-collections-controller.php b/src/api/endpoints/class-tainacan-rest-collections-controller.php index a1b7f4b39..6e9d7eb0c 100644 --- a/src/api/endpoints/class-tainacan-rest-collections-controller.php +++ b/src/api/endpoints/class-tainacan-rest-collections-controller.php @@ -158,7 +158,12 @@ class TAINACAN_REST_Collections_Controller extends TAINACAN_REST_Controller { */ public function get_item_permissions_check($request){ $collection = $this->collections_repository->fetch($request['collection_id']); - return $collection->can_read(); + + if($collection instanceof Entities\Collection) { + return $collection->can_read(); + } + + return false; } /** @@ -257,7 +262,12 @@ class TAINACAN_REST_Collections_Controller extends TAINACAN_REST_Controller { */ public function delete_item_permissions_check( $request ) { $collection = $this->collections_repository->fetch($request['collection_id']); - return $collection->can_delete(); + + if($collection instanceof Entities\Collection) { + return $collection->can_delete(); + } + + return false; } /** @@ -307,7 +317,12 @@ class TAINACAN_REST_Collections_Controller extends TAINACAN_REST_Controller { */ public function update_item_permissions_check( $request ) { $collection = $this->collections_repository->fetch($request['collection_id']); - return $collection->can_edit(); + + if($collection instanceof Entities\Collection) { + return $collection->can_edit(); + } + + return false; } /** diff --git a/src/api/endpoints/class-tainacan-rest-filters-controller.php b/src/api/endpoints/class-tainacan-rest-filters-controller.php index b99eb3e09..bb19cbfe8 100644 --- a/src/api/endpoints/class-tainacan-rest-filters-controller.php +++ b/src/api/endpoints/class-tainacan-rest-filters-controller.php @@ -145,7 +145,16 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { * @return bool|WP_Error */ public function create_item_permissions_check( $request ) { - return $this->filter_repository->can_edit($this->filter); + $body = json_decode($request->get_body(), true); + + $metadata = $this->metadata_repository->fetch($body['metadata_id']); + $collection = $this->collection_repository->fetch($body['collection_id']); + + if(($metadata instanceof Entities\Metadata) && ($collection instanceof Entities\Collection)) { + return (($this->filter_repository->can_edit($this->filter)) === ($metadata->can_edit())) === ($collection->can_edit()); + } + + return false; } /** @@ -179,7 +188,12 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { */ public function delete_item_permissions_check( $request ) { $filter = $this->filter_repository->fetch($request['filter_id']); - return $this->filter_repository->can_delete($filter); + + if ($filter instanceof Entities\Filter) { + return $filter->can_delete(); + } + + return false; } /** @@ -218,7 +232,12 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { */ public function update_item_permissions_check( $request ) { $filter = $this->filter_repository->fetch($request['filter_id']); - return $this->filter_repository->can_edit($filter); + + if ($filter instanceof Entities\Filter) { + return $filter->can_edit(); + } + + return false; } /** @@ -284,7 +303,12 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { */ public function get_item_permissions_check( $request ) { $filter = $this->filter_repository->fetch($request['filter_id']); - return $this->filter_repository->can_read($filter); + + if ($filter instanceof Entities\Filter) { + return $filter->can_read(); + } + + return false; } } ?> \ No newline at end of file diff --git a/src/api/endpoints/class-tainacan-rest-items-controller.php b/src/api/endpoints/class-tainacan-rest-items-controller.php index 38ba38623..04441e8d9 100644 --- a/src/api/endpoints/class-tainacan-rest-items-controller.php +++ b/src/api/endpoints/class-tainacan-rest-items-controller.php @@ -147,12 +147,22 @@ class TAINACAN_REST_Items_Controller extends TAINACAN_REST_Controller { */ public function get_item_permissions_check( $request ) { $item = $this->items_repository->fetch($request['item_id']); - return $item->can_read(); + + if ($item instanceof Entities\Item) { + return $item->can_read(); + } + + return false; } public function get_items_permissions_check( $request ) { $collection = $this->collections_repository->fetch($request['collection_id']); - return $collection->can_read(); + + if ($collection instanceof Entities\Collection) { + return $collection->can_read(); + } + + return false; } /** @@ -273,7 +283,12 @@ class TAINACAN_REST_Items_Controller extends TAINACAN_REST_Controller { */ public function delete_item_permissions_check( $request ) { $item = $this->items_repository->fetch($request['item_id']); - return $item->can_delete(); + + if ($item instanceof Entities\Item) { + return $item->can_delete(); + } + + return false; } /** @@ -318,7 +333,12 @@ class TAINACAN_REST_Items_Controller extends TAINACAN_REST_Controller { */ public function update_item_permissions_check( $request ) { $item = $this->items_repository->fetch($request['item_id']); - return $item->can_edit(); + + if ($item instanceof Entities\Item) { + return $item->can_edit(); + } + + return false; } } diff --git a/src/api/endpoints/class-tainacan-rest-metadata-controller.php b/src/api/endpoints/class-tainacan-rest-metadata-controller.php index 9b01a7fb1..24799ee41 100644 --- a/src/api/endpoints/class-tainacan-rest-metadata-controller.php +++ b/src/api/endpoints/class-tainacan-rest-metadata-controller.php @@ -194,7 +194,7 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_REST_Controller { * @throws Exception */ public function create_item_permissions_check( $request ) { - if(!empty($request['item_id'])){ + if(isset($request['item_id'])){ return $this->item_repository->can_edit(new Entities\Item()); } @@ -260,11 +260,22 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_REST_Controller { * @throws Exception */ public function get_items_permissions_check( $request ) { - if(!empty($request['item_id'])){ - return $this->item_repository->can_read(new Entities\Item()); + if(isset($request['item_id'])){ + $item = $this->item_repository->fetch($request['item_id']); + + if($item instanceof Entities\Item) { + return $item->can_read(); + } + + } elseif (isset($request['collection_id'])) { + $collection = $this->collection_repository->fetch($request['collection_id']); + + if ($collection instanceof Entities\Collection) { + return $collection->can_read(); + } } - return $this->collection_repository->can_read(new Entities\Collection()); + return false; } /** @@ -297,11 +308,22 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_REST_Controller { * @throws Exception */ public function delete_item_permissions_check( $request ) { - if(!empty($request['item_id'])){ - return $this->item_repository->can_delete(new Entities\Item()); + if(isset($request['item_id'])){ + $item = $this->item_repository->fetch($request['item_id']); + + if($item instanceof Entities\Item) { + return $item->can_delete(); + } + + } elseif (isset($request['collection_id'])) { + $collection = $this->collection_repository->fetch($request['collection_id']); + + if ($collection instanceof Entities\Collection) { + return $collection->can_delete(); + } } - return $this->collection_repository->can_delete(new Entities\Collection()); + return false; } /** @@ -393,12 +415,21 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_REST_Controller { public function update_item_permissions_check( $request ) { if (isset($request['item_id'])) { $item = $this->item_repository->fetch($request['item_id']); - return $item->can_edit(); + + if ($item instanceof Entities\Item) { + return $item->can_edit(); + } + } elseif(isset($request['collection_id'])) { $collection = $this->collection_repository->fetch($request['collection_id']); - return $collection->can_edit(); + + if ($collection instanceof Entities\Collection) { + return $collection->can_edit(); + } + } - + + return false; } } diff --git a/src/api/endpoints/class-tainacan-rest-taxonomies-controller.php b/src/api/endpoints/class-tainacan-rest-taxonomies-controller.php index 111d87ef1..9519d72f4 100644 --- a/src/api/endpoints/class-tainacan-rest-taxonomies-controller.php +++ b/src/api/endpoints/class-tainacan-rest-taxonomies-controller.php @@ -118,7 +118,12 @@ class TAINACAN_REST_Taxonomies_Controller extends TAINACAN_REST_Controller { */ public function get_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); - return $this->taxonomy_repository->can_read($taxonomy); + + if ($taxonomy instanceof Entities\Taxonomy) { + return $taxonomy->can_read(); + } + + return false; } /** @@ -174,7 +179,13 @@ class TAINACAN_REST_Taxonomies_Controller extends TAINACAN_REST_Controller { */ public function delete_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); - return $this->taxonomy_repository->can_delete($taxonomy); + + if ($taxonomy instanceof Entities\Taxonomy) { + return $taxonomy->can_delete(); + } + + return false; + } /** @@ -273,7 +284,12 @@ class TAINACAN_REST_Taxonomies_Controller extends TAINACAN_REST_Controller { */ public function update_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); - return $this->taxonomy_repository->can_edit($taxonomy); + + if ($taxonomy instanceof Entities\Taxonomy) { + return $taxonomy->can_edit(); + } + + return false; } } diff --git a/src/api/endpoints/class-tainacan-rest-terms-controller.php b/src/api/endpoints/class-tainacan-rest-terms-controller.php index 3ca5f775c..1a1e53e7a 100644 --- a/src/api/endpoints/class-tainacan-rest-terms-controller.php +++ b/src/api/endpoints/class-tainacan-rest-terms-controller.php @@ -131,9 +131,11 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_REST_Controller { */ public function create_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); + if ($taxonomy instanceof Entities\Taxonomy) { return $taxonomy->can_edit(); } + return false; } @@ -168,9 +170,11 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_REST_Controller { */ public function delete_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); + if ($taxonomy instanceof Entities\Taxonomy) { return $taxonomy->can_edit(); } + return false; } @@ -217,9 +221,11 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_REST_Controller { */ public function update_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); + if ($taxonomy instanceof Entities\Taxonomy) { return $taxonomy->can_edit(); } + return false; } @@ -270,7 +276,12 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_REST_Controller { */ public function get_items_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); - return $this->taxonomy_repository->can_read($taxonomy); + + if ($taxonomy instanceof Entities\Taxonomy) { + return $taxonomy->can_read(); + } + + return false; } /** @@ -296,7 +307,12 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_REST_Controller { */ public function get_item_permissions_check( $request ) { $taxonomy = $this->taxonomy_repository->fetch($request['taxonomy_id']); - return $this->taxonomy_repository->can_read($taxonomy); + + if ($taxonomy instanceof Entities\Taxonomy) { + return $taxonomy->can_read(); + } + + return false; } } diff --git a/tests/test-api-filters.php b/tests/test-api-filters.php index aa68296ac..5e0e2f8ae 100644 --- a/tests/test-api-filters.php +++ b/tests/test-api-filters.php @@ -14,15 +14,20 @@ class TAINACAN_REST_Terms_Controller extends TAINACAN_UnitApiTestCase { 'name' => 'Collection filtered', 'description' => 'Is filtered' ), + true, true ); $metadata = $this->tainacan_entity_factory->create_entity( 'metadata', array( - 'name' => 'Metadata filtered', - 'description' => 'Is filtered' - ) + 'name' => 'Metadata filtered', + 'description' => 'Is filtered', + 'collection_id' => $collection->get_id(), + 'field_type' => 'text' + ), + true, + true ); $request_body = json_encode( From 0a6448dd7627e4bc708d655d0b8fbd07fd0260a9 Mon Sep 17 00:00:00 2001 From: weryques Date: Wed, 31 Jan 2018 11:17:31 -0200 Subject: [PATCH 2/5] Fix create filter permissions check --- src/api/endpoints/class-tainacan-rest-filters-controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/endpoints/class-tainacan-rest-filters-controller.php b/src/api/endpoints/class-tainacan-rest-filters-controller.php index bb19cbfe8..47dc580f7 100644 --- a/src/api/endpoints/class-tainacan-rest-filters-controller.php +++ b/src/api/endpoints/class-tainacan-rest-filters-controller.php @@ -151,7 +151,7 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { $collection = $this->collection_repository->fetch($body['collection_id']); if(($metadata instanceof Entities\Metadata) && ($collection instanceof Entities\Collection)) { - return (($this->filter_repository->can_edit($this->filter)) === ($metadata->can_edit())) === ($collection->can_edit()); + return ( (($this->filter_repository->can_edit($this->filter)) === true) === ($metadata->can_edit()) ) === ($collection->can_edit()); } return false; From 9eea456f74a40b86929f9445190d5cfccae2bf49 Mon Sep 17 00:00:00 2001 From: weryques Date: Wed, 31 Jan 2018 11:20:48 -0200 Subject: [PATCH 3/5] Fixes permission --- src/api/endpoints/class-tainacan-rest-filters-controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/endpoints/class-tainacan-rest-filters-controller.php b/src/api/endpoints/class-tainacan-rest-filters-controller.php index 47dc580f7..64d13dbb4 100644 --- a/src/api/endpoints/class-tainacan-rest-filters-controller.php +++ b/src/api/endpoints/class-tainacan-rest-filters-controller.php @@ -151,7 +151,7 @@ class TAINACAN_REST_Filters_Controller extends TAINACAN_REST_Controller { $collection = $this->collection_repository->fetch($body['collection_id']); if(($metadata instanceof Entities\Metadata) && ($collection instanceof Entities\Collection)) { - return ( (($this->filter_repository->can_edit($this->filter)) === true) === ($metadata->can_edit()) ) === ($collection->can_edit()); + return $this->filter_repository->can_edit($this->filter) && $metadata->can_edit() && $collection->can_edit(); } return false; From 095d192d6dee94e3aef7e3dd555ae6c662e8d4f6 Mon Sep 17 00:00:00 2001 From: weryques Date: Wed, 31 Jan 2018 12:45:25 -0200 Subject: [PATCH 4/5] Show collection image --- src/admin/pages/collection-page.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/admin/pages/collection-page.vue b/src/admin/pages/collection-page.vue index baf3f001b..8e89adc99 100644 --- a/src/admin/pages/collection-page.vue +++ b/src/admin/pages/collection-page.vue @@ -1,8 +1,8 @@