cms/app/Http/Controllers/Admin/Menu/BaseMenuItemController.php

193 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Menu;
use Auth;
use View;
use Arr;
use Gate;
use Str;
use Illuminate\Http\Request;
/**
* Class BaseMenuItemController
* @package App\Http\Controllers\Admin\Menu
*/
abstract class BaseMenuItemController
{
/**
* 顯示名稱
*
* @var string
*/
protected $name;
/**
* Slug
*
* @var string
*/
protected $slug;
/**
* 所需權限,有一個符合即可
* 如沒有填入,代表不設限
* 子選單預設會沿用父選單的權限,如有填入,則再加上自己的權限
*
* @var array
*/
protected $permissions = [];
/**
* 選單項目的Icon類別
*
* @var array
*/
protected $iconClasses = [];
/**
* @var array
*/
protected $badge;
/**
* Default route handler
*/
public function handle(Request $request)
{
abort(404);
}
/**
* @return string
*/
public function getName()
{
return trans($this->name);
}
/**
* @param string $name
*/
public function setName($name): void
{
$this->name = $name;
}
/**
* @return string
*/
public function getSlug()
{
return $this->slug;
}
/**
* @param string $slug
*/
public function setSlug($slug): void
{
$this->slug = $slug;
}
/**
* @return array
*/
public function getPermissions(): array
{
return $this->permissions;
}
/**
* @param array $permissions
*/
public function setPermissions(array $permissions): void
{
$this->permissions = $permissions;
}
/**
* Get bootstrap badge arguments
*
* @return array|null
*/
public function getBadge()
{
if(!empty($this->badge['label']) && !empty($this->badge['type'])) {
return Arr::add($this->badge, 'isPill', false);
} else {
return null;
}
}
/**
* Set bootstrap badge arguments
*
* @param array $badge
*/
public function setBadge(array $badge): void
{
$this->badge = $badge;
}
/**
* @return string|array
*/
public function getIconClass(): string
{
if(is_array($this->iconClasses)) {
return implode(' ', $this->iconClasses);
} else {
return $this->iconClasses;
}
}
/**
* @param array|string $iconClasses
*/
public function setIconClasses($iconClasses): void
{
$this->iconClasses = $iconClasses;
}
/**
* @return bool
*/
public function hasIcon()
{
return !empty($this->getIconClass());
}
/**
* @return bool
*/
public function hasBadge()
{
return !empty($this->badge);
}
/**
* @return bool
* @throws \Exception
*/
public function userHasPermission()
{
$hasAnyPermission = false;
foreach ($this->permissions as $permission) {
$hasAnyPermission = $hasAnyPermission || Gate::allows('permission:' . Str::kebab($permission));
}
return Auth::check() &&
((!empty($this->permissions) && $hasAnyPermission) || empty($this->permissions));
}
/**
* Valid if both name and slug are not empty
*
* @return bool
*/
public function isValid()
{
return $this->getName() && $this->getSlug();
}
}