diff --git a/app/Models/Content/Content.php b/app/Models/Content/Content.php index f747e835..de8a9c35 100644 --- a/app/Models/Content/Content.php +++ b/app/Models/Content/Content.php @@ -87,6 +87,10 @@ class Content extends Model */ public function category() { + if (!class_exists(Category::class)) { + throw new \ErrorException('Categories are not installed'); + } + return $this->belongsTo(Category::class); } diff --git a/app/Policies/ContentPolicy.php b/app/Policies/ContentPolicy.php index dc1f7c7d..1ee72ca6 100644 --- a/app/Policies/ContentPolicy.php +++ b/app/Policies/ContentPolicy.php @@ -2,6 +2,7 @@ namespace App\Policies; +use App\CMS\Contracts\Repositories\Content as ContentContract; use App\Models\Content\Content; use App\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; @@ -35,21 +36,83 @@ class ContentPolicy extends BasicPolicy * * @return bool */ - public function create(User $user) { + public function create(User $user) + { return $user->hasAbility('create-contents'); } - public function publish(User $user) + /** + * Change page status + * + * @param User $user + * @param Content $page + * @param $status + * + * @return bool + */ + public function changeStatus(User $user, Content $page, $status) + { + switch ($status) { + case ContentContract::STATUS_PUBLIC: + return $this->publish($user, $page); + break; + case ContentContract::STATUS_DRAFT: + return $this->draft($user, $page); + break; + case ContentContract::STATUS_PROTECTED: + return $this->protect($user, $page); + break; + } + + return false; + } + + /** + * Can user publish given page? + * + * @param User $user + * @param Content $page + * + * @return bool + */ + public function publish(User $user, Content $page) { return $user->hasAbility('publish-contents'); } + /** + * Can user make draft from given page? + * + * @param User $user + * @param Content $page + * + * @return bool + */ + public function draft(User $user, Content $page) + { + return $user->hasAbility('draft-contents'); + } + + /** + * Can user publish page only for protected users? + * + * @param User $user + * @param Content $page + * + * @return bool + */ + public function protect(User $user, Content $page) + { + return $user->hasAbility('protect-contents'); + } + public function setHomepage(User $user) { return $user->hasAbility('set-homepage-contents'); } - public function viewHistory(User $user) { + public function viewHistory(User $user) + { return $user->hasAbility('view-history-contents'); } } diff --git a/routes/admin/contents.php b/routes/admin/contents.php index 75cf1a08..5e22de8f 100644 --- a/routes/admin/contents.php +++ b/routes/admin/contents.php @@ -29,7 +29,7 @@ Route::group(['namespace' => 'Contents'], function () { // change status of page (protected, public or draft) Route::get('content/status/{page}/{status}', 'ContentActions@changeStatus') ->name('content.changeStatus') - ->middleware('can:changeStatus,page'); + ->middleware('can:changeStatus,page,status'); // set homepage Route::get('content/homepage/{page}', 'ContentActions@setHomepage')