From: Vincent Vanwaelscappel Date: Thu, 1 Feb 2024 18:06:06 +0000 (+0100) Subject: wip #6693 @5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=1e4e8323ae0f4b638d607cc5c6b56de3622bc0d8;p=fluidbook-elearning.git wip #6693 @5 --- diff --git a/.idea/fluidbook-elearning.iml b/.idea/fluidbook-elearning.iml index 7d22726..eac892b 100644 --- a/.idea/fluidbook-elearning.iml +++ b/.idea/fluidbook-elearning.iml @@ -202,6 +202,13 @@ + + + + + + + diff --git a/.idea/php.xml b/.idea/php.xml index 6c23646..13bc02a 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -200,6 +200,13 @@ + + + + + + + diff --git a/app/Models/User.php b/app/Models/User.php index 4d7f70f..f06407a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,44 +2,14 @@ namespace App\Models; -// use Illuminate\Contracts\Auth\MustVerifyEmail; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Foundation\Auth\User as Authenticatable; -use Illuminate\Notifications\Notifiable; -use Laravel\Sanctum\HasApiTokens; +use Cubist\Backpack\Magic\Models\CubistMagicAuthenticatable; -class User extends Authenticatable +class User extends CubistMagicAuthenticatable { - use HasApiTokens, HasFactory, Notifiable; + protected $table = 'users'; + protected $_options = ['name' => 'user', + 'singular' => 'user', + 'plural' => 'users']; - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'name', - 'email', - 'password', - ]; - - /** - * The attributes that should be hidden for serialization. - * - * @var array - */ - protected $hidden = [ - 'password', - 'remember_token', - ]; - - /** - * The attributes that should be cast. - * - * @var array - */ - protected $casts = [ - 'email_verified_at' => 'datetime', - 'password' => 'hashed', - ]; + protected static $_permissionBase = 'user'; } diff --git a/config/backpack/base.php b/config/backpack/base.php index 0fa3af5..86abbe7 100644 --- a/config/backpack/base.php +++ b/config/backpack/base.php @@ -133,7 +133,7 @@ return [ // The guard that protects the Backpack admin panel. // If null, the config.auth.defaults.guard value will be used. - 'guard' => 'backpack', + 'guard' => 'web', // The password reset configuration for Backpack. // If null, the config.auth.defaults.passwords value will be used. diff --git a/config/backpack/basset.php b/config/backpack/basset.php new file mode 100644 index 0000000..8f69434 --- /dev/null +++ b/config/backpack/basset.php @@ -0,0 +1,28 @@ + env('APP_DEBUG'), + + // verify ssl certificate while fetching assets + 'verify_ssl_certificate' => env('BASSET_VERIFY_SSL_CERTIFICATE', true), + + // disk and path where to store bassets + 'disk' => env('BASSET_DISK', 'public'), + 'path' => 'basset', + + // use cache map file (.basset) + 'cache_map' => env('BASSET_CACHE_MAP', true), + + // view paths that may use @basset + // used to internalize assets in advance with artisan basset:internalize + 'view_paths' => [ + resource_path('views'), + ], + + // content security policy nonce + 'nonce' => null, + + // use relative path + 'relative_paths' => env('BASSET_RELATIVE_PATHS', true), +]; diff --git a/config/backpack/menu.php b/config/backpack/menu.php new file mode 100644 index 0000000..88e0ef3 --- /dev/null +++ b/config/backpack/menu.php @@ -0,0 +1,19 @@ + [ + ['label' => 'Contenus', 'icon' => 'ti ti-brush', 'items' => [ + ['label' => 'Pages', 'icon' => 'ti ti-file-code', 'url' => 'pages'], + ['label' => 'Traductions', 'icon' => 'ti ti-language', 'url' => 'pages'], + ['label' => 'Paramètres', 'icon' => 'ti ti-adjustments', 'url' => 'settings'], + ]], + ['label' => 'Utilisateurs', 'icon' => 'ti ti-users', 'section' => 'users', 'items' => [ + ['label' => 'Utilisateurs', 'icon' => 'ti ti-user', 'url' => 'user', 'can' => 'user:admin'], + ['label' => 'Rôles', 'icon' => 'ti ti-user-check', 'url' => 'role', 'can' => 'user:admin'], + ['label' => 'Permissions', 'icon' => 'ti ti-user-shield', 'url' => 'permission', 'can' => 'user:admin'], + ]], + ['label' => 'Administration', 'icon' => 'ti ti-settings', 'section' => 'admin', 'items' => [ + ['label' => 'Logs', 'icon' => 'ti ti-file-stack', 'url' => 'log', 'can' => 'maintenance'], + ['label' => 'Backup', 'icon' => 'ti ti-history', 'url' => 'backup', 'can' => 'maintenance'], + ]], + ] +]; diff --git a/config/backpack/theme-tabler.php b/config/backpack/theme-tabler.php index c6fb196..7e10825 100644 --- a/config/backpack/theme-tabler.php +++ b/config/backpack/theme-tabler.php @@ -22,7 +22,7 @@ return [ * Possible values: horizontal, horizontal_dark, horizontal_overlap, vertical, * vertical_dark, vertical_transparent (legacy theme), right_vertical, right_vertical_dark, right_vertical_transparent */ - 'layout' => 'horizontal_overlap', + 'layout' => 'horizontal', /** * Pick a login page layout. @@ -40,7 +40,8 @@ return [ */ 'styles' => [ base_path('vendor/backpack/theme-tabler/resources/assets/css/color-adjustments.css'), - base_path('vendor/backpack/theme-tabler/resources/assets/css/colors.css'), + base_path('resources/css/tabler/colors.css'), + base_path('resources/css/tabler/app.css'), ], /** @@ -62,7 +63,7 @@ return [ /** * The color mode used by default. */ - 'defaultColorMode' => 'system', // system, light, dark + 'defaultColorMode' => 'light', // system, light, dark /** * When true, a switch is displayed to let admins choose their favorite theme mode. diff --git a/config/backpack/ui.php b/config/backpack/ui.php index 21ef8eb..a2fb9b0 100644 --- a/config/backpack/ui.php +++ b/config/backpack/ui.php @@ -46,7 +46,7 @@ return [ // ---- // Project name - shown in the window title - 'project_name' => 'Backpack Admin Panel', + 'project_name' => 'Fluidbook Digital Learning', // Content of the HTML meta robots tag to prevent indexing and link following 'meta_robots_content' => 'noindex, nofollow', @@ -60,10 +60,10 @@ return [ // The string below will be passed through the url() helper. // - default: '' (project root) // - alternative: 'admin' (the admin's dashboard) - 'home_link' => '', + 'home_link' => '/admin', // Menu logo. You can replace this with an tag if you have a logo. - 'project_logo' => 'Backpack', + 'project_logo' => '', // Show / hide breadcrumbs on admin panel pages. 'breadcrumbs' => true, @@ -72,14 +72,8 @@ return [ // FOOTER // ------ - // Developer or company name. Shown in footer. - 'developer_name' => 'Cristian Tabacitu', - - // Developer website. Link in footer. Type false if you want to hide it. - 'developer_link' => 'http://tabacitu.ro', - // Show powered by Laravel Backpack in the footer? true/false - 'show_powered_by' => true, + 'show_powered_by' => false, // --------- // DASHBOARD @@ -94,6 +88,7 @@ return [ // CSS files that are loaded in all pages, using Laravel's asset() helper 'styles' => [ + 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@2.46.0/tabler-icons.min.css', // 'styles/example.css', // 'https://some-cdn.com/example.css', ], @@ -115,6 +110,7 @@ return [ // JS files that are loaded in all pages, using Laravel's asset() helper 'scripts' => [ + 'https://cdn.jsdelivr.net/npm/tabler-icons@1.35.0/icons-react/dist/index.umd.min.js', // 'js/example.js', // 'https://unpkg.com/vue@2.4.4/dist/vue.min.js', // 'https://unpkg.com/react@16/umd/react.production.min.js', diff --git a/resources/css/app.css b/resources/css/app.css deleted file mode 100644 index e69de29..0000000 diff --git a/resources/css/tabler/app.css b/resources/css/tabler/app.css new file mode 100644 index 0000000..a111ba0 --- /dev/null +++ b/resources/css/tabler/app.css @@ -0,0 +1,11 @@ +.nav-brand a { + padding-top: 0; + padding-bottom: 0; +} + +#logo svg { + width: 160px; + padding-right: 2em; +} + +/*# sourceMappingURL=app.css.map */ diff --git a/resources/css/tabler/app.css.map b/resources/css/tabler/app.css.map new file mode 100644 index 0000000..7c0dbe4 --- /dev/null +++ b/resources/css/tabler/app.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["app.sass"],"names":[],"mappings":"AACI;EACI;EACA;;;AAEJ;EACI;EACA","file":"app.css"} \ No newline at end of file diff --git a/resources/css/tabler/app.sass b/resources/css/tabler/app.sass new file mode 100644 index 0000000..c1ef3f3 --- /dev/null +++ b/resources/css/tabler/app.sass @@ -0,0 +1,9 @@ +.nav-brand + a + padding-top: 0 + padding-bottom: 0 +#logo + svg + width: 160px + padding-right: 2em + diff --git a/resources/css/tabler/colors.css b/resources/css/tabler/colors.css new file mode 100644 index 0000000..b05b59f --- /dev/null +++ b/resources/css/tabler/colors.css @@ -0,0 +1,229 @@ +@charset "UTF-8"; +:root, +[data-bs-theme=light] { + --tblr-blue: #206bc4; + --tblr-indigo: #4263eb; + --tblr-purple: #ae3ec9; + --tblr-pink: #d6336c; + --tblr-red: #d63939; + --tblr-orange: #f76707; + --tblr-yellow: #f59f00; + --tblr-green: #2fb344; + --tblr-teal: #0ca678; + --tblr-cyan: #17a2b8; + --tblr-black: #000000; + --tblr-white: #ffffff; + --tblr-gray: #49566c; + --tblr-gray-dark: #1d273b; + --tblr-gray-100: #f1f5f9; + --tblr-gray-200: #e2e8f0; + --tblr-gray-300: #c8d3e1; + --tblr-gray-400: #9ba9be; + --tblr-gray-500: #6c7a91; + --tblr-gray-600: #49566c; + --tblr-gray-700: #313c52; + --tblr-gray-800: #1d273b; + --tblr-gray-900: #0f172a; + --tblr-primary: #206bc4; + --tblr-secondary: #616876; + --tblr-success: #2fb344; + --tblr-info: #4299e1; + --tblr-warning: #f76707; + --tblr-danger: #d63939; + --tblr-light: #f8fafc; + --tblr-dark: #1d273b; + --tblr-muted: #616876; + --tblr-blue: #206bc4; + --tblr-azure: #4299e1; + --tblr-indigo: #4263eb; + --tblr-purple: #ae3ec9; + --tblr-pink: #d6336c; + --tblr-red: #d63939; + --tblr-orange: #f76707; + --tblr-yellow: #f59f00; + --tblr-lime: #74b816; + --tblr-green: #2fb344; + --tblr-teal: #0ca678; + --tblr-cyan: #17a2b8; + --tblr-facebook: #1877F2; + --tblr-twitter: #1da1f2; + --tblr-linkedin: #0a66c2; + --tblr-google: #dc4e41; + --tblr-youtube: #ff0000; + --tblr-vimeo: #1ab7ea; + --tblr-dribbble: #ea4c89; + --tblr-github: #181717; + --tblr-instagram: #e4405f; + --tblr-pinterest: #bd081c; + --tblr-vk: #6383a8; + --tblr-rss: #ffa500; + --tblr-flickr: #0063dc; + --tblr-bitbucket: #0052cc; + --tblr-tabler: #206bc4; + --tblr-primary-rgb: 32, 107, 196; + --tblr-secondary-rgb: 97, 104, 118; + --tblr-success-rgb: 47, 179, 68; + --tblr-info-rgb: 66, 153, 225; + --tblr-warning-rgb: 247, 103, 7; + --tblr-danger-rgb: 214, 57, 57; + --tblr-light-rgb: 248, 250, 252; + --tblr-dark-rgb: 29, 39, 59; + --tblr-muted-rgb: 97, 104, 118; + --tblr-blue-rgb: 32, 107, 196; + --tblr-azure-rgb: 66, 153, 225; + --tblr-indigo-rgb: 66, 99, 235; + --tblr-purple-rgb: 174, 62, 201; + --tblr-pink-rgb: 214, 51, 108; + --tblr-red-rgb: 214, 57, 57; + --tblr-orange-rgb: 247, 103, 7; + --tblr-yellow-rgb: 245, 159, 0; + --tblr-lime-rgb: 116, 184, 22; + --tblr-green-rgb: 47, 179, 68; + --tblr-teal-rgb: 12, 166, 120; + --tblr-cyan-rgb: 23, 162, 184; + --tblr-facebook-rgb: 24, 119, 242; + --tblr-twitter-rgb: 29, 161, 242; + --tblr-linkedin-rgb: 10, 102, 194; + --tblr-google-rgb: 220, 78, 65; + --tblr-youtube-rgb: 255, 0, 0; + --tblr-vimeo-rgb: 26, 183, 234; + --tblr-dribbble-rgb: 234, 76, 137; + --tblr-github-rgb: 24, 23, 23; + --tblr-instagram-rgb: 228, 64, 95; + --tblr-pinterest-rgb: 189, 8, 28; + --tblr-vk-rgb: 99, 131, 168; + --tblr-rss-rgb: 255, 165, 0; + --tblr-flickr-rgb: 0, 99, 220; + --tblr-bitbucket-rgb: 0, 82, 204; + --tblr-tabler-rgb: 32, 107, 196; + --tblr-primary-text: #1a569d; + --tblr-secondary-text: #49566c; + --tblr-success-text: #268f36; + --tblr-info-text: #0e616e; + --tblr-warning-text: #935f00; + --tblr-danger-text: #ab2e2e; + --tblr-light-text: #49566c; + --tblr-dark-text: #313c52; + --tblr-primary-bg-subtle: #d2e1f3; + --tblr-secondary-bg-subtle: #f1f5f9; + --tblr-success-bg-subtle: #d5f0da; + --tblr-info-bg-subtle: #d1ecf1; + --tblr-warning-bg-subtle: #fdeccc; + --tblr-danger-bg-subtle: #f7d7d7; + --tblr-light-bg-subtle: #f8fafc; + --tblr-dark-bg-subtle: #9ba9be; + --tblr-primary-border-subtle: #a6c4e7; + --tblr-secondary-border-subtle: #e2e8f0; + --tblr-success-border-subtle: #ace1b4; + --tblr-info-border-subtle: #a2dae3; + --tblr-warning-border-subtle: #fbd999; + --tblr-danger-border-subtle: #efb0b0; + --tblr-light-border-subtle: #e2e8f0; + --tblr-dark-border-subtle: #6c7a91; + --tblr-white-rgb: 255, 255, 255; + --tblr-black-rgb: 0, 0, 0; + --tblr-body-color-rgb: 29, 39, 59; + --tblr-body-bg-rgb: 241, 245, 249; + --tblr-font-sans-serif: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif; + --tblr-font-monospace: Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + --tblr-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --tblr-body-font-family: var(--tblr-font-sans-serif); + --tblr-body-font-size: 0.875rem; + --tblr-body-font-weight: 400; + --tblr-body-line-height: 1.4285714286; + --tblr-body-color: #1d273b; + --tblr-emphasis-color: #000000; + --tblr-emphasis-color-rgb: 0, 0, 0; + --tblr-secondary-color: rgba(29, 39, 59, 0.75); + --tblr-secondary-color-rgb: 29, 39, 59; + --tblr-secondary-bg: #e2e8f0; + --tblr-secondary-bg-rgb: 226, 232, 240; + --tblr-tertiary-color: rgba(29, 39, 59, 0.5); + --tblr-tertiary-color-rgb: 29, 39, 59; + --tblr-tertiary-bg: #f1f5f9; + --tblr-tertiary-bg-rgb: 241, 245, 249; + --tblr-body-bg: #f1f5f9; + --tblr-body-bg-rgb: 241, 245, 249; + --tblr-link-color: #206bc4; + --tblr-link-color-rgb: 32, 107, 196; + --tblr-link-decoration: none; + --tblr-link-hover-color: #1a569d; + --tblr-link-hover-color-rgb: 26, 86, 157; + --tblr-link-hover-decoration: underline; + --tblr-code-color: var(--tblr-gray-600); + --tblr-highlight-bg: #fdeccc; + --tblr-border-width: 1px; + --tblr-border-style: solid; + --tblr-border-color: #e6e7e9; + --tblr-border-color-translucent: rgba(97, 104, 118, 0.16); + --tblr-border-radius: 4px; + --tblr-border-radius-sm: 2px; + --tblr-border-radius-lg: 8px; + --tblr-border-radius-xl: 1rem; + --tblr-border-radius-2xl: 2rem; + --tblr-border-radius-pill: 100rem; + --tblr-box-shadow: 0 0.5rem 1rem rgba(var(--tblr-body-color-rgb), 0.15); + --tblr-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--tblr-body-color-rgb), 0.075); + --tblr-box-shadow-lg: 0 1rem 3rem rgba(var(--tblr-body-color-rgb), 0.175); + --tblr-box-shadow-inset: inset 0 1px 2px rgba(var(--tblr-body-color-rgb), 0.075); + --tblr-emphasis-color: #000000; + --tblr-form-control-bg: var(--tblr-body-bg); + --tblr-form-control-disabled-bg: var(--tblr-secondary-bg); + --tblr-highlight-bg: #fdeccc; + --tblr-breakpoint-xs: 0; + --tblr-breakpoint-sm: 576px; + --tblr-breakpoint-md: 768px; + --tblr-breakpoint-lg: 992px; + --tblr-breakpoint-xl: 1200px; + --tblr-breakpoint-xxl: 1400px; +} + +[data-bs-theme=dark] { + --tblr-body-color: #6c7a91; + --tblr-body-color-rgb: 108, 122, 145; + --tblr-body-bg: #0f172a; + --tblr-body-bg-rgb: 15, 23, 42; + --tblr-emphasis-color: #f1f5f9; + --tblr-emphasis-color-rgb: 241, 245, 249; + --tblr-secondary-color: rgba(108, 122, 145, 0.75); + --tblr-secondary-color-rgb: 108, 122, 145; + --tblr-secondary-bg: #1d273b; + --tblr-secondary-bg-rgb: 29, 39, 59; + --tblr-tertiary-color: rgba(108, 122, 145, 0.5); + --tblr-tertiary-color-rgb: 108, 122, 145; + --tblr-tertiary-bg: #161f33; + --tblr-tertiary-bg-rgb: 22, 31, 51; + --tblr-emphasis-color: #ffffff; + --tblr-primary-text: #79a6dc; + --tblr-secondary-text: #c8d3e1; + --tblr-success-text: #82d18f; + --tblr-info-text: #74c7d4; + --tblr-warning-text: #f9c566; + --tblr-danger-text: #e68888; + --tblr-light-text: #f1f5f9; + --tblr-dark-text: #c8d3e1; + --tblr-primary-bg-subtle: #061527; + --tblr-secondary-bg-subtle: #0f172a; + --tblr-success-bg-subtle: #09240e; + --tblr-info-bg-subtle: #052025; + --tblr-warning-bg-subtle: #312000; + --tblr-danger-bg-subtle: #2b0b0b; + --tblr-light-bg-subtle: #1d273b; + --tblr-dark-bg-subtle: #0f141e; + --tblr-primary-border-subtle: #134076; + --tblr-secondary-border-subtle: #313c52; + --tblr-success-border-subtle: #1c6b29; + --tblr-info-border-subtle: #09414a; + --tblr-warning-border-subtle: #624000; + --tblr-danger-border-subtle: #802222; + --tblr-light-border-subtle: #313c52; + --tblr-dark-border-subtle: #1d273b; + --tblr-heading-color: #fff; + --tblr-link-color: #79a6dc; + --tblr-link-hover-color: #a6c4e7; + --tblr-link-color-rgb: 121, 166, 220; + --tblr-link-hover-color-rgb: 166, 196, 231; + --tblr-code-color: #e685a7; + --tblr-border-color: #313c52; + --tblr-border-color-translucent: rgba(255, 255, 255, 0.15); +} diff --git a/resources/views/icons.blade.php b/resources/views/icons.blade.php new file mode 100644 index 0000000..b98f39a --- /dev/null +++ b/resources/views/icons.blade.php @@ -0,0 +1,143 @@ +@push('content') + {{-- + + Downloaded from https://toolbox.fluidbook.com/tool-sprite/11/download + Edit here : https://toolbox.fluidbook.com/tool-sprite/11/edit + + --}} + + +@endpush diff --git a/resources/views/vendor/backpack/theme-tabler/blank.blade.php b/resources/views/vendor/backpack/theme-tabler/blank.blade.php new file mode 100644 index 0000000..d287b5a --- /dev/null +++ b/resources/views/vendor/backpack/theme-tabler/blank.blade.php @@ -0,0 +1,35 @@ +@extends(backpack_view('layouts.' . (backpack_theme_config('layout') ?? 'vertical'))) + +@include('icons') + +@php + // Merge widgets that were fluently declared with widgets declared without the fluent syntax: + // - $data['widgets']['before_content'] + // - $data['widgets']['after_content'] + if (isset($widgets)) { + foreach ($widgets as $section => $widgetSection) { + foreach ($widgetSection as $key => $widget) { + \Backpack\CRUD\app\Library\Widget::add($widget)->section($section); + } + } + } +@endphp + +@section('before_breadcrumbs_widgets') + @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('section', 'before_breadcrumbs')->toArray() ]) +@endsection + +@section('after_breadcrumbs_widgets') + @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('section', 'after_breadcrumbs')->toArray() ]) +@endsection + +@section('before_content_widgets') + @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('section', 'before_content')->toArray() ]) +@endsection + +@section('content') +@endsection + +@section('after_content_widgets') + @include(backpack_view('inc.widgets'), [ 'widgets' => app('widgets')->where('section', 'after_content')->toArray() ]) +@endsection diff --git a/resources/views/vendor/backpack/theme-tabler/layouts/horizontal.blade.php b/resources/views/vendor/backpack/theme-tabler/layouts/horizontal.blade.php new file mode 100644 index 0000000..41494cb --- /dev/null +++ b/resources/views/vendor/backpack/theme-tabler/layouts/horizontal.blade.php @@ -0,0 +1,51 @@ + + + + + + @include(backpack_view('inc.head')) + + + + +@include(backpack_view('layouts.partials.light_dark_mode_logic')) + +
+
+ +
+ @includeWhen(backpack_theme_config('options.doubleTopBarInHorizontalLayouts'), backpack_view('layouts._horizontal.header_container')) + @include(backpack_view('layouts._horizontal.menu_container')) +
+ +
+
+ + @yield('before_breadcrumbs_widgets') + @includeWhen(isset($breadcrumbs), backpack_view('inc.breadcrumbs')) + @yield('after_breadcrumbs_widgets') + @yield('header') + +
+ @yield('before_content_widgets') + @stack('content') + @yield('content') + @yield('after_content_widgets') +
+
+
+ + @include(backpack_view('inc.footer')) +
+
+ +@yield('before_scripts') +@stack('before_scripts') + +@include(backpack_view('inc.scripts')) +@include(backpack_view('inc.theme_scripts')) + +@yield('after_scripts') +@stack('after_scripts') + + diff --git a/resources/views/vendor/backpack/ui/inc/menu_items.blade.php b/resources/views/vendor/backpack/ui/inc/menu_items.blade.php index 735ec95..c84e22d 100644 --- a/resources/views/vendor/backpack/ui/inc/menu_items.blade.php +++ b/resources/views/vendor/backpack/ui/inc/menu_items.blade.php @@ -1,6 +1,20 @@ -{{-- This file is used for menu items by any Backpack v6 theme --}} - - -
  • Backups
  • -
  • Logs
  • - \ No newline at end of file + + + +@canany('["user:admin","user:admin","user:admin"]') + + @can('user:admin') + + @endcan + @can('user:admin') + + @endcan + @can('user:admin') + + @endcan + +@endcan + + + +