FIX: fix permissions for publishing content pages
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user