├── resources
├── css
│ └── app.css
├── js
│ └── app.js
├── sass
│ └── app.scss
├── views
│ ├── doc
│ │ ├── route.php
│ │ ├── nuxt
│ │ │ └── index.blade.php
│ │ └── laravel
│ │ │ └── index.blade.php
│ ├── auth
│ │ ├── verify.blade.php
│ │ ├── passwords
│ │ │ ├── email.blade.php
│ │ │ ├── confirm.blade.php
│ │ │ └── reset.blade.php
│ │ ├── login.blade.php
│ │ └── register.blade.php
│ ├── welcome.blade.php
│ └── layouts
│ │ └── app.blade.php
└── lang
│ ├── fa
│ ├── pagination.php
│ ├── auth.php
│ ├── passwords.php
│ └── validation-inline.php
│ └── en
│ ├── pagination.php
│ ├── auth.php
│ └── passwords.php
├── bootstrap
├── cache
│ └── .gitignore
└── app.php
├── storage
├── logs
│ └── .gitignore
├── app
│ ├── public
│ │ ├── .gitignore
│ │ └── mansory.gif
│ └── .gitignore
└── framework
│ ├── testing
│ └── .gitignore
│ ├── views
│ └── .gitignore
│ ├── cache
│ ├── data
│ │ └── .gitignore
│ └── .gitignore
│ ├── sessions
│ └── .gitignore
│ └── .gitignore
├── database
├── .gitignore
├── seeders
│ ├── PersonalVisitSeeder.php
│ ├── DatabaseSeeder.php
│ ├── PermissionSeeder.php
│ ├── RoleSeeder.php
│ ├── BrandSeeder.php
│ ├── CategorySeeder.php
│ ├── ProductSeeder.php
│ ├── UserSeeder.php
│ └── SidebarSeeder.php
├── migrations
│ ├── 2021_01_22_204829_create_personal_number_visits_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2021_01_25_224100_create_messages_table.php
│ ├── 2020_12_07_101047_create_products_table.php
│ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2020_12_01_120621_create_roles_table.php
│ ├── 2021_02_06_093155_create_categories_table.php
│ ├── 2020_12_01_120857_create_permissions_table.php
│ └── 2020_11_29_120918_create_sidebars_table.php
└── factories
│ └── UserFactory.php
├── public
├── robots.txt
├── favicon.ico
├── images
│ ├── www.png
│ ├── demo.png
│ ├── nuxt.png
│ ├── discord.png
│ ├── github.png
│ ├── license.png
│ ├── youtube.png
│ └── demo-mobile.png
├── .htaccess
├── web.config
└── index.php
├── .gitattributes
├── tests
├── TestCase.php
├── Unit
│ └── ExampleTest.php
├── Feature
│ └── ExampleTest.php
└── CreatesApplication.php
├── .styleci.yml
├── .gitignore
├── .editorconfig
├── app
├── Models
│ ├── User
│ │ ├── PersonalNumberVisit.php
│ │ ├── PersonalAccessToken.php
│ │ └── User.php
│ ├── Category
│ │ ├── Brand.php
│ │ └── Category.php
│ ├── Sidebar
│ │ ├── SidebarItem.php
│ │ └── Sidebar.php
│ ├── Product
│ │ └── Product.php
│ ├── Message
│ │ └── Message.php
│ └── Role
│ │ ├── Role.php
│ │ └── Permission.php
├── Http
│ ├── Middleware
│ │ ├── EncryptCookies.php
│ │ ├── VerifyCsrfToken.php
│ │ ├── TrimStrings.php
│ │ ├── TrustHosts.php
│ │ ├── PreventRequestsDuringMaintenance.php
│ │ ├── TrustProxies.php
│ │ ├── Authenticate.php
│ │ ├── NumberVisits.php
│ │ ├── AuthKey.php
│ │ ├── BrowseAdmin.php
│ │ └── RedirectIfAuthenticated.php
│ ├── Controllers
│ │ ├── Controller.php
│ │ ├── Auth
│ │ │ ├── ForgotPasswordController.php
│ │ │ ├── ResetPasswordController.php
│ │ │ ├── ConfirmPasswordController.php
│ │ │ ├── VerificationController.php
│ │ │ ├── LoginController.php
│ │ │ └── RegisterController.php
│ │ └── Panel
│ │ │ ├── CategoryController.php
│ │ │ ├── MessageController.php
│ │ │ ├── SidebarController.php
│ │ │ ├── RoleController.php
│ │ │ ├── ProductController.php
│ │ │ └── UserController.php
│ ├── Resources
│ │ ├── Category
│ │ │ └── Category.php
│ │ ├── Role
│ │ │ └── Role.php
│ │ ├── Sidebar
│ │ │ └── Sidebar.php
│ │ ├── Product
│ │ │ └── Product.php
│ │ ├── User
│ │ │ └── User.php
│ │ └── Message
│ │ │ └── Message.php
│ ├── Requests
│ │ ├── Message
│ │ │ └── StoreMessage.php
│ │ ├── Category
│ │ │ ├── UpdateCategory.php
│ │ │ └── StoreCategory.php
│ │ ├── Role
│ │ │ ├── UpdateRole.php
│ │ │ └── StoreRole.php
│ │ ├── User
│ │ │ ├── StoreUser.php
│ │ │ └── UpdateUser.php
│ │ ├── Product
│ │ │ ├── StoreProduct.php
│ │ │ └── UpdateProduct.php
│ │ └── Sidebar
│ │ │ └── UpdateSidebar.php
│ └── Kernel.php
├── Providers
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ └── RouteServiceProvider.php
├── Policies
│ ├── CategoryPolicy.php
│ ├── RolePolicy.php
│ ├── UserPolicy.php
│ ├── ProductPolicy.php
│ └── SidebarPolicy.php
├── Console
│ └── Kernel.php
└── Exceptions
│ └── Handler.php
├── routes
├── web.php
├── channels.php
├── console.php
└── api.php
├── webpack.mix.js
├── server.php
├── config
├── cors.php
├── services.php
├── view.php
├── hashing.php
├── broadcasting.php
├── sanctum.php
├── queue.php
├── logging.php
├── cache.php
├── filesystems.php
├── mail.php
├── auth.php
├── database.php
└── session.php
├── a.cmd
├── package.json
├── phpunit.xml
├── .env.example
├── artisan
├── composer.json
└── README.md
/resources/css/app.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/sass/app.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 | *.sqlite-journal
3 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/www.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/www.png
--------------------------------------------------------------------------------
/public/images/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/demo.png
--------------------------------------------------------------------------------
/public/images/nuxt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/nuxt.png
--------------------------------------------------------------------------------
/public/images/discord.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/discord.png
--------------------------------------------------------------------------------
/public/images/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/github.png
--------------------------------------------------------------------------------
/public/images/license.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/license.png
--------------------------------------------------------------------------------
/public/images/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/youtube.png
--------------------------------------------------------------------------------
/public/images/demo-mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/public/images/demo-mobile.png
--------------------------------------------------------------------------------
/storage/app/public/mansory.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mnsry/laravel-admin-panel/HEAD/storage/app/public/mansory.gif
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | CHANGELOG.md export-ignore
6 |
--------------------------------------------------------------------------------
/resources/views/doc/route.php:
--------------------------------------------------------------------------------
1 | name('laravel.index');
4 | Route::view('/nuxt', 'doc.nuxt.index')->name('nuxt.index');
5 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/database/seeders/PersonalVisitSeeder.php:
--------------------------------------------------------------------------------
1 | morphToMany(Category::class, 'categoryable');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustHosts.php:
--------------------------------------------------------------------------------
1 | allSubdomainsOfApplicationUrl(),
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Http/Middleware/PreventRequestsDuringMaintenance.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | group(function () {
6 | Route::get('/', function () {
7 | return response(['message' => 'https://storage.laranuxt.ir']);
8 | });
9 | });
10 |
11 | Auth::routes();
12 |
13 | Route::get('/', function () {
14 | return view('welcome');
15 | });
16 |
17 | Route::get('/home', function () {
18 | return response()->json('home', 200);
19 | })->name('home')->middleware('auth');
20 |
--------------------------------------------------------------------------------
/app/Http/Resources/Category/Category.php:
--------------------------------------------------------------------------------
1 | $this->id,
20 | // ];
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | 'required|min:10'
17 | ];
18 | }
19 |
20 | public function authorize()
21 | {
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/Models/Sidebar/SidebarItem.php:
--------------------------------------------------------------------------------
1 | belongsTo(Sidebar::class);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Http/Requests/Category/UpdateCategory.php:
--------------------------------------------------------------------------------
1 | 'required|min:4',
17 | ];
18 | }
19 |
20 | public function authorize()
21 | {
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson()) {
18 | return route('login');
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Models/Product/Product.php:
--------------------------------------------------------------------------------
1 | belongsTo(User::class);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Http/Requests/Category/StoreCategory.php:
--------------------------------------------------------------------------------
1 | 'required|min:4|unique:categories',
17 | ];
18 | }
19 |
20 | public function authorize()
21 | {
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/Http/Middleware/NumberVisits.php:
--------------------------------------------------------------------------------
1 | 'required|min:4',
17 | 'display_name' => 'required|min:5'
18 | ];
19 | }
20 |
21 | public function authorize()
22 | {
23 | return true;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Models/Sidebar/Sidebar.php:
--------------------------------------------------------------------------------
1 | hasMany(SidebarItem::class);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Http/Requests/Role/StoreRole.php:
--------------------------------------------------------------------------------
1 | 'required|min:4|unique:roles',
17 | 'display_name' => 'required|min:5'
18 | ];
19 | }
20 |
21 | public function authorize()
22 | {
23 | return true;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Http/Requests/User/StoreUser.php:
--------------------------------------------------------------------------------
1 | 'required|min:3',
17 | 'email' => 'required|email|min:7|unique:users',
18 | ];
19 | }
20 |
21 | public function authorize()
22 | {
23 | return true;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | const mix = require('laravel-mix');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Mix Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Mix provides a clean, fluent API for defining some Webpack build steps
9 | | for your Laravel application. By default, we are compiling the Sass
10 | | file for the application as well as bundling up all the JS files.
11 | |
12 | */
13 |
14 | mix.js('resources/js/app.js', 'public/js')
15 | .sass('resources/sass/app.scss', 'public/css')
16 | .sourceMaps();
17 |
--------------------------------------------------------------------------------
/resources/lang/fa/pagination.php:
--------------------------------------------------------------------------------
1 | '« قبلی',
17 | 'next' => 'بعدی »',
18 | ];
19 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/app/Http/Requests/Product/StoreProduct.php:
--------------------------------------------------------------------------------
1 | 'required|min:7',
17 | 'body' => 'required|min:20',
18 | 'image' => 'required|image'
19 | ];
20 | }
21 |
22 | public function authorize()
23 | {
24 | return true;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Requests/Product/UpdateProduct.php:
--------------------------------------------------------------------------------
1 | 'required|min:7',
17 | 'body' => 'required|min:20',
18 | 'image' => 'nullable|image'
19 | ];
20 | }
21 |
22 | public function authorize()
23 | {
24 | return true;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Requests/Sidebar/UpdateSidebar.php:
--------------------------------------------------------------------------------
1 | 'required|min:5',
17 | 'prepend_icon' => 'required|min:5',
18 | 'append_icon' => 'nullable',
19 | ];
20 | }
21 |
22 | public function authorize()
23 | {
24 | return true;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(SidebarSeeder::class);
15 | $this->call(PermissionSeeder::class);
16 | $this->call(UserSeeder::class);
17 | $this->call(RoleSeeder::class);
18 | $this->call(ProductSeeder::class);
19 | $this->call(PersonalVisitSeeder::class);
20 | $this->call(CategorySeeder::class);
21 | $this->call(BrandSeeder::class);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Http/Requests/User/UpdateUser.php:
--------------------------------------------------------------------------------
1 | 'nullable|min:3',
17 | 'family' => 'nullable|string',
18 | 'mobile' => 'nullable|numeric',
19 | 'avatar' => 'nullable|image'
20 | ];
21 | }
22 |
23 | public function authorize()
24 | {
25 | return true;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/database/seeders/PermissionSeeder.php:
--------------------------------------------------------------------------------
1 | 'browse_admin',
19 | 'display_key' => 'کلید ادمین',
20 | 'table_name' => 'admins',
21 | 'display_table' => 'ادمین',
22 | ]);
23 |
24 | foreach (Permission::tables() as $table => $value) {
25 | Permission::createKey($table, $value);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Middleware/AuthKey.php:
--------------------------------------------------------------------------------
1 | header('APP_KEY');
21 | if($token != 'ABCD1234'){
22 | return response()->json('کلید هدر| APP_KEY | پیدا نشد!', 401);
23 | }
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Models/Message/Message.php:
--------------------------------------------------------------------------------
1 | belongsTo(User::class);
21 | }
22 |
23 | // Relation Many Message With One Model User
24 | public function to_user_info()
25 | {
26 | return $this->belongsTo(User::class, 'to_user');
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'password' => 'The provided password is incorrect.',
18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
19 |
20 | ];
21 |
--------------------------------------------------------------------------------
/app/Policies/CategoryPolicy.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_categories');
12 | }
13 |
14 | public function add(User $user)
15 | {
16 | return $user->hasPermission('add_categories');
17 | }
18 |
19 | public function read(User $user)
20 | {
21 | return $user->hasPermission('read_categories');
22 | }
23 |
24 | public function edit(User $user)
25 | {
26 | return $user->hasPermission('edit_categories');
27 | }
28 |
29 | public function delete(User $user)
30 | {
31 | return $user->hasPermission('delete_categories');
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/resources/lang/fa/auth.php:
--------------------------------------------------------------------------------
1 | 'مشخصات وارد شده با اطلاعات ما سازگار نیست.',
17 | 'password' => 'کلمه عبور ارائه شده نادرست است.',
18 | 'throttle' => 'دفعات تلاش شما برای ورود بیش از حد مجاز است. لطفا پس از :seconds ثانیه مجددا تلاش فرمایید.',
19 | ];
20 |
--------------------------------------------------------------------------------
/app/Http/Middleware/BrowseAdmin.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_admin')
23 | ? $next($request)
24 | : abort(403, 'دسترسی وجود ندارد!');
25 | }
26 | return abort(401, 'ابتدا باید وارد شوید!');
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ForgotPasswordController.php:
--------------------------------------------------------------------------------
1 | 'admin',
20 | 'display_name' => 'مدیر کل',
21 | ]);
22 |
23 | $permissions = Permission::all()->pluck('id')->toArray();
24 | $role->permissions()->attach($permissions);
25 | $role->users()->attach(1);
26 |
27 | Role::create([
28 | 'name' => 'user',
29 | 'display_name' => 'کاربر عادی',
30 | ]);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Models/Role/Role.php:
--------------------------------------------------------------------------------
1 | belongsToMany(User::class);
22 | }
23 |
24 | // Relation Many Role With Many Model Permission
25 | public function permissions()
26 | {
27 | return $this->belongsToMany(Permission::class);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Http/Resources/Role/Role.php:
--------------------------------------------------------------------------------
1 | $this->id,
19 | 'name' => $this->name,
20 | 'display_name' => $this->display_name,
21 | 'created_at' => $this->created_at,
22 | /**
23 | * @note user has Relation
24 | * @note permissions has Relation
25 | */
26 | 'users' => $this->users,
27 | 'permissions' => $this->permissions,
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/migrations/2021_01_22_204829_create_personal_number_visits_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->integer('seen')->default(0);
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | *
25 | * @return void
26 | */
27 | public function down()
28 | {
29 | Schema::dropIfExists('personal_number_visits');
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/Providers/EventServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
19 | SendEmailVerificationNotification::class,
20 | ],
21 | ];
22 |
23 | /**
24 | * Register any events for your application.
25 | *
26 | * @return void
27 | */
28 | public function boot()
29 | {
30 | //
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have emailed your password reset link!',
18 | 'throttled' => 'Please wait before retrying.',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that email address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/fa/passwords.php:
--------------------------------------------------------------------------------
1 | 'رمز عبور شما بازگردانی شد!',
17 | 'sent' => 'لینک بازگردانی رمز عبور به ایمیل شما ارسال شد.',
18 | 'throttled' => 'پیش از تلاش مجدد کمی صبر کنید.',
19 | 'token' => 'مشخصهی بازگردانی رمز عبور معتبر نیست.',
20 | 'user' => 'ما کاربری با این نشانی ایمیل نداریم!',
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Policies/RolePolicy.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_roles');
19 | }
20 |
21 | public function read(User $user)
22 | {
23 | return $user->hasPermission('read_roles');
24 | }
25 |
26 | public function add(User $user)
27 | {
28 | return $user->hasPermission('add_roles');
29 | }
30 |
31 | public function edit(User $user)
32 | {
33 | return $user->hasPermission('edit_roles');
34 | }
35 |
36 | public function delete(User $user)
37 | {
38 | return $user->hasPermission('delete_roles');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Policies/UserPolicy.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_users');
19 | }
20 |
21 | public function read(User $user)
22 | {
23 | return $user->hasPermission('read_users');
24 | }
25 |
26 | public function add(User $user)
27 | {
28 | return $user->hasPermission('add_users');
29 | }
30 |
31 | public function edit(User $user)
32 | {
33 | return $user->hasPermission('edit_users');
34 | }
35 |
36 | public function delete(User $user)
37 | {
38 | return $user->hasPermission('delete_users');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | ['auth:sanctum', 'browse.admin']], function (){
15 | Route::apiResource('role', RoleController::class);
16 | Route::apiResource('user', UserController::class);
17 | Route::apiResource('sidebar', SidebarController::class);
18 | Route::apiResource('product', ProductController::class);
19 | Route::apiResource('message',MessageController::class);
20 | Route::apiResource('category',CategoryController::class);
21 | });
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/RedirectIfAuthenticated.php:
--------------------------------------------------------------------------------
1 | check()) {
26 | return redirect(RouteServiceProvider::HOME);
27 | }
28 | }
29 |
30 | return $next($request);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Resources/Sidebar/Sidebar.php:
--------------------------------------------------------------------------------
1 | $this->id,
19 | 'title' => $this->title,
20 | 'slug' => $this->slug,
21 | 'prepend_icon' => $this->prepend_icon,
22 | 'append_icon' => $this->append_icon,
23 | 'active' => $this->active,
24 | 'created_at' => $this->created_at,
25 | /**
26 | * @note sidebarItems has Relation
27 | */
28 | 'sidebarItems' => $this->sidebarItems,
29 | ];
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/Policies/ProductPolicy.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_products');
19 | }
20 |
21 | public function read(User $user)
22 | {
23 | return $user->hasPermission('read_products');
24 | }
25 |
26 | public function add(User $user)
27 | {
28 | return $user->hasPermission('add_products');
29 | }
30 |
31 | public function edit(User $user)
32 | {
33 | return $user->hasPermission('edit_products');
34 | }
35 |
36 | public function delete(User $user)
37 | {
38 | return $user->hasPermission('delete_products');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Policies/SidebarPolicy.php:
--------------------------------------------------------------------------------
1 | hasPermission('browse_sidebars');
19 | }
20 |
21 | public function read(User $user)
22 | {
23 | return $user->hasPermission('read_sidebars');
24 | }
25 |
26 | public function add(User $user)
27 | {
28 | return $user->hasPermission('add_sidebars');
29 | }
30 |
31 | public function edit(User $user)
32 | {
33 | return $user->hasPermission('edit_sidebars');
34 | }
35 |
36 | public function delete(User $user)
37 | {
38 | return $user->hasPermission('delete_sidebars');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/database/migrations/2021_01_25_224100_create_messages_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
19 | $table->string('message');
20 | $table->foreignId('to_user')->constrained('users');
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::dropIfExists('messages');
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/Http/Resources/Product/Product.php:
--------------------------------------------------------------------------------
1 | $this->id,
20 | 'user_id' => $this->user_id,
21 | 'title' => $this->title,
22 | 'body' => $this->body,
23 | 'created_at' => $this->created_at,
24 | /**
25 | * @note Custom url() Address in { @see \config\filesystems } Line 58
26 | * @note user has Relation
27 | */
28 | 'image' => Storage::url($this->image),
29 | 'user' => $this->user
30 | ];
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Resources/User/User.php:
--------------------------------------------------------------------------------
1 | $this->id,
20 | 'name' => $this->name,
21 | 'family' => $this->family,
22 | 'mobile' => $this->mobile,
23 | 'email' => $this->email,
24 | 'created_at' => $this->created_at,
25 | /**
26 | * @note Custom url() Address in { @see \config\filesystems } Line 58
27 | * @note roles has Relation
28 | */
29 | 'avatar' => Storage::url($this->avatar),
30 | 'roles' => $this->roles,
31 | ];
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | id();
19 | $table->foreignId('user_id')->constrained('users');
20 | $table->string('title');
21 | $table->text('body');
22 | $table->string('image')->nullable();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('products');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/config/cors.php:
--------------------------------------------------------------------------------
1 | ['api/*', 'login', 'logout', 'sanctum/csrf-cookie'],
19 |
20 | 'allowed_methods' => ['*'],
21 |
22 | 'allowed_origins' => ['*'],
23 |
24 | 'allowed_origins_patterns' => [],
25 |
26 | 'allowed_headers' => ['*'],
27 |
28 | 'exposed_headers' => [],
29 |
30 | 'max_age' => 0,
31 |
32 | 'supports_credentials' => true,
33 |
34 | ];
35 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')->hourly();
28 | }
29 |
30 | /**
31 | * Register the commands for the application.
32 | *
33 | * @return void
34 | */
35 | protected function commands()
36 | {
37 | $this->load(__DIR__.'/Commands');
38 |
39 | require base_path('routes/console.php');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/a.cmd:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | doskey pa=php artisan $*
4 | doskey pas=php artisan serve $*
5 |
6 | doskey pamc=php artisan make:controller $*
7 | doskey pame=php artisan make:event $*
8 | doskey paml=php artisan make:listener $*
9 | doskey pamj=php artisan make:job $*
10 | doskey pamm=php artisan make:model $*
11 | doskey pammi=php artisan make:middleware $*
12 | doskey pams=php artisan make:seeder $*
13 | doskey pamp=php artisan make:policy $*
14 | doskey pamreq=php artisan make:request $*
15 | doskey pamres=php artisan make:resource $*
16 |
17 | doskey pakg=php artisan key:generate $*
18 | doskey pasl=php artisan storage:link $*
19 | doskey parl=php artisan route:list $*
20 |
21 | doskey pacc=php artisan cache:clear $*
22 | doskey pacoc=php artisan config:clear $*
23 | doskey parc=php artisan route:clear $*
24 | doskey paoc=php artisan optimize:clear $*
25 | doskey pamrs=php artisan migrate:fresh --seed $*
26 |
27 |
28 | doskey paqw=php artisan queue:work $*
29 | doskey paql=php artisan queue:listen $*
30 | doskey pasr=php artisan schedule:run $*
31 |
--------------------------------------------------------------------------------
/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->name,
27 | 'family' => $this->faker->name,
28 | 'avatar' => '',
29 | 'mobile' => $this->faker->phoneNumber,
30 | 'email' => $this->faker->unique()->safeEmail,
31 | 'email_verified_at' => now(),
32 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
33 | 'remember_token' => Str::random(10),
34 | ];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/seeders/BrandSeeder.php:
--------------------------------------------------------------------------------
1 | 'سامسونگ',
19 | ]);
20 | $brand1->categories()->attach([1, 2]);
21 |
22 | $brand2 = Brand::create([
23 | 'brand' => 'اپل',
24 | ]);
25 | $brand2->categories()->attach([1, 2]);
26 |
27 | $brand3 = Brand::create([
28 | 'brand' => 'شیائومی',
29 | ]);
30 | $brand3->categories()->attach(1);
31 |
32 | $brand4 = Brand::create([
33 | 'brand' => 'اچ پی',
34 | ]);
35 | $brand4->categories()->attach(2);
36 |
37 | $brand5 = Brand::create([
38 | 'brand' => 'ایسوس',
39 | ]);
40 | $brand5->categories()->attach(2);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | ],
22 |
23 | 'postmark' => [
24 | 'token' => env('POSTMARK_TOKEN'),
25 | ],
26 |
27 | 'ses' => [
28 | 'key' => env('AWS_ACCESS_KEY_ID'),
29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
31 | ],
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/database/seeders/CategorySeeder.php:
--------------------------------------------------------------------------------
1 | 'موبایل'
19 | ]);
20 |
21 | Category::create([
22 | 'category' => 'لپ تاپ'
23 | ]);
24 |
25 | $category3 = Category::create([
26 | 'category' => 'گوشی موبایل',
27 | 'category_id' => 1,
28 | ]);
29 |
30 | Category::create([
31 | 'category' => 'لوازم جانبی موبایل',
32 | 'category_id' => 1,
33 | ]);
34 |
35 | $category5 = Category::create([
36 | 'category' => 'لبتاب و الترا بوک',
37 | 'category_id' => 2,
38 | ]);
39 |
40 | Category::create([
41 | 'category' => 'لوازم لبتاپ',
42 | 'category_id' => 2,
43 | ]);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
19 | $table->morphs('tokenable');
20 | $table->string('name');
21 | $table->string('token', 64)->unique();
22 | $table->text('abilities')->nullable();
23 | $table->timestamp('last_used_at')->nullable();
24 | $table->timestamps();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('personal_access_tokens');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/Http/Resources/Message/Message.php:
--------------------------------------------------------------------------------
1 | $this->id,
21 | 'user_id' => $this->user_id,
22 | 'message' => $this->message,
23 | 'to_user' => $this->to_user,
24 | 'created_at' => $this->created_at,
25 | /**
26 | * @note auth_user has Relation { @see \App\Models\Message\Message::user() }
27 | * @note to_user_info has Relation { @see \App\Models\Message\Message::to_user_info() }
28 | */
29 | 'auth_user' => UserResource::make(User::find($this->user->id)),
30 | 'to_user_info' => UserResource::make(User::find($this->to_user_info->id)),
31 | ];
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('family')->nullable();
20 | $table->string('avatar')->nullable();
21 | $table->string('mobile')->unique()->nullable();
22 | $table->string('email')->unique()->nullable();
23 | $table->timestamp('email_verified_at')->nullable();
24 | $table->string('password');
25 | $table->rememberToken();
26 | $table->timestamps();
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | *
33 | * @return void
34 | */
35 | public function down()
36 | {
37 | Schema::dropIfExists('users');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "npm run development",
5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "npm run development -- --watch",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "axios": "^0.19",
14 | "bootstrap": "^4.0.0",
15 | "cross-env": "^7.0",
16 | "jquery": "^3.2",
17 | "laravel-mix": "^5.0.1",
18 | "lodash": "^4.17.19",
19 | "popper.js": "^1.12",
20 | "resolve-url-loader": "^3.1.0",
21 | "sass": "^1.15.2",
22 | "sass-loader": "^8.0.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ConfirmPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/resources/views/auth/verify.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | @if (session('resent'))
12 |
13 | {{ __('A fresh verification link has been sent to your email address.') }}
14 |
15 | @endif
16 |
17 | {{ __('Before proceeding, please check your email for a verification link.') }}
18 | {{ __('If you did not receive the email') }},
19 |
23 |
24 |
25 |
26 |
27 |
28 | @endsection
29 |
--------------------------------------------------------------------------------
/app/Providers/AuthServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'App\Policies\ModelPolicy',
26 | Category::class => CategoryPolicy::class,
27 | Product::class => ProductPolicy::class,
28 | Role::class => RolePolicy::class,
29 | Sidebar::class => SidebarPolicy::class,
30 | User::class => UserPolicy::class,
31 | ];
32 |
33 | /**
34 | * Register any authentication / authorization services.
35 | *
36 | * @return void
37 | */
38 | public function boot()
39 | {
40 | $this->registerPolicies();
41 |
42 | //
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_01_120621_create_roles_table.php:
--------------------------------------------------------------------------------
1 | id();
20 | $table->string('name')->unique();
21 | $table->string('display_name');
22 | $table->timestamps();
23 | });
24 |
25 | Schema::create('role_user', function (Blueprint $table) {
26 | $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
27 | $table->foreignId('role_id')->constrained('roles')->onDelete('cascade');
28 | $table->primary(['user_id', 'role_id']);
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('role_user');
40 | Schema::dropIfExists('roles');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/public/web.config:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | ./tests/Unit
10 |
11 |
12 | ./tests/Feature
13 |
14 |
15 |
16 |
17 | ./app
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/database/seeders/ProductSeeder.php:
--------------------------------------------------------------------------------
1 | 1,
19 | 'title' => 'گوشی موبایل سامسونگ S10',
20 | 'body' => 'توضیحات برای گوشی سامسونگ s10 و مشخصات',
21 | 'image' => 'mansory.gif'
22 | ]);
23 |
24 | Product::create([
25 | 'user_id' => 1,
26 | 'title' => 'گوشی موبایل آیفن 11',
27 | 'body' => 'توضیحات برای گوشی آیفن 11 و مشخصات',
28 | 'image' => 'mansory.gif'
29 | ]);
30 |
31 | Product::create([
32 | 'user_id' => 2,
33 | 'title' => 'لبتاب لنوو s540',
34 | 'body' => 'توضیحات برای لبتاب لنوو اس 540 و مشخصات',
35 | 'image' => 'mansory.gif'
36 | ]);
37 |
38 | Product::create([
39 | 'user_id' => 2,
40 | 'title' => 'لبتاب مک بوک پرو',
41 | 'body' => 'توضیحات برای لبتاب مک بوک پرو و مشخصات',
42 | 'image' => 'mansory.gif'
43 | ]);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/VerificationController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
39 | $this->middleware('signed')->only('verify');
40 | $this->middleware('throttle:6,1')->only('verify', 'resend');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://localhost
6 |
7 | APP_STORAGE_ROOT="app/public" # InTo Local | path: app/public
8 | #APP_STORAGE_ROOT="../../subDomain.domain.ir" # InTo Server | path: cd subDomain Folder
9 | APP_STORAGE_URL="http://localhost:8000/storage" # InTo Local | url: APP_URL + /storage
10 | #APP_STORAGE_URL="https://subDomain.domain.ir" # InTo Server | url: subDomain
11 |
12 | LOG_CHANNEL=stack
13 | LOG_LEVEL=debug
14 |
15 | DB_CONNECTION=mysql
16 | DB_HOST=127.0.0.1
17 | DB_PORT=3306
18 | DB_DATABASE=laravel
19 | DB_USERNAME=root
20 | DB_PASSWORD=
21 |
22 | BROADCAST_DRIVER=log
23 | CACHE_DRIVER=file
24 | QUEUE_CONNECTION=sync
25 | SESSION_DRIVER=file
26 | SESSION_LIFETIME=120
27 |
28 | REDIS_HOST=127.0.0.1
29 | REDIS_PASSWORD=null
30 | REDIS_PORT=6379
31 |
32 | MAIL_MAILER=smtp
33 | MAIL_HOST=smtp.mailtrap.io
34 | MAIL_PORT=2525
35 | MAIL_USERNAME=null
36 | MAIL_PASSWORD=null
37 | MAIL_ENCRYPTION=null
38 | MAIL_FROM_ADDRESS=null
39 | MAIL_FROM_NAME="${APP_NAME}"
40 |
41 | AWS_ACCESS_KEY_ID=
42 | AWS_SECRET_ACCESS_KEY=
43 | AWS_DEFAULT_REGION=us-east-1
44 | AWS_BUCKET=
45 |
46 | PUSHER_APP_ID=
47 | PUSHER_APP_KEY=
48 | PUSHER_APP_SECRET=
49 | PUSHER_APP_CLUSTER=mt1
50 |
51 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
52 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
53 |
--------------------------------------------------------------------------------
/database/migrations/2021_02_06_093155_create_categories_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->foreignId('category_id')->nullable()->constrained('categories');
19 | $table->string('category');
20 | $table->timestamps();
21 | });
22 |
23 | Schema::create('categoryables', function (Blueprint $table) {
24 | $table->foreignId('category_id')->constrained('categories');
25 | $table->morphs('categoryable');
26 | });
27 |
28 | Schema::create('category_brands', function (Blueprint $table) {
29 | $table->id();
30 | $table->string('brand');
31 | $table->timestamps();
32 | });
33 | }
34 |
35 | /**
36 | * Reverse the migrations.
37 | *
38 | * @return void
39 | */
40 | public function down()
41 | {
42 | Schema::dropIfExists('category_brands');
43 | Schema::dropIfExists('categoryables');
44 | Schema::dropIfExists('categories');
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/database/migrations/2020_12_01_120857_create_permissions_table.php:
--------------------------------------------------------------------------------
1 | id();
20 | $table->string('key')->unique()->index();
21 | $table->string('display_key');
22 | $table->string('table_name');
23 | $table->string('display_table');
24 | $table->timestamps();
25 | });
26 |
27 | Schema::create('permission_role', function (Blueprint $table) {
28 | $table->foreignId('role_id')->constrained('roles')->onDelete('cascade');
29 | $table->foreignId('permission_id')->constrained('permissions')->onDelete('cascade');
30 | $table->primary(['role_id', 'permission_id']);
31 | });
32 | }
33 |
34 | /**
35 | * Reverse the migrations.
36 | *
37 | * @return void
38 | */
39 | public function down()
40 | {
41 | Schema::dropIfExists('permission_role');
42 | Schema::dropIfExists('permissions');
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/Models/Category/Category.php:
--------------------------------------------------------------------------------
1 | hasMany(self::class, 'category_id');
14 | }
15 |
16 | public function allChildes()
17 | {
18 | return collect($this->childes)->pluck('posts')->flatten()->unique();
19 | }
20 |
21 | public function getAll($categories)
22 | {
23 | $append = collect();
24 | foreach ($categories as $category)
25 | {
26 | if ($category->childes->count())
27 | {
28 | $append->merge($category->childes);
29 | }
30 | }
31 | if ($append->count())
32 | {
33 | $append = $this->getAll($append);
34 | }
35 | return $categories->merge($append);
36 | }
37 |
38 | public function parent()
39 | {
40 | return $this->belongsTo(self::class, 'category_id');
41 | }
42 |
43 | public static function backParent($category)
44 | {
45 | if ($category->category_id == null) {
46 | return $category;
47 | } else {
48 | return Category::backParent($category->parent);
49 | }
50 | }
51 |
52 | public function brands()
53 | {
54 | return $this->morphedByMany(Brand::class, 'categoryable');
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/database/migrations/2020_11_29_120918_create_sidebars_table.php:
--------------------------------------------------------------------------------
1 | id();
20 | $table->string('title');
21 | $table->string('slug');
22 | $table->string('prepend_icon')->nullable();
23 | $table->string('append_icon')->nullable();
24 | $table->boolean('active')->default(false);
25 | $table->timestamps();
26 | });
27 |
28 | Schema::create('sidebar_items', function (Blueprint $table) {
29 | $table->id();
30 | $table->foreignId('sidebar_id')->constrained('sidebars')->onDelete('cascade');
31 | $table->string('title');
32 | $table->string('slug');
33 | $table->timestamps();
34 | });
35 | }
36 |
37 | /**
38 | * Reverse the migrations.
39 | *
40 | * @return void
41 | */
42 | public function down()
43 | {
44 | Schema::dropIfExists('sidebar_items');
45 | Schema::dropIfExists('sidebars');
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
40 | }
41 |
42 | /**
43 | * @note When User Login, Can Get Bearer Code
44 | *
45 | * @param Request $request
46 | * @param $user
47 | * @return \Illuminate\Http\Response
48 | */
49 | protected function authenticated(Request $request, $user)
50 | {
51 | return response($user->createToken($request->userAgent())->plainTextToken);
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/Models/User/User.php:
--------------------------------------------------------------------------------
1 | 'date:d-M-y',
30 | 'created_at' => 'datetime:D, d M Y H:i:s T',
31 | ];
32 |
33 | // BrowseAdmin Middleware
34 | public function hasPermission($name)
35 | {
36 | $permissions = $this->roles->pluck('permissions')->flatten()->pluck('key')->toArray();
37 | return in_array($name, $permissions);
38 | }
39 |
40 | // Relation Many User With Many Model Role
41 | public function roles()
42 | {
43 | return $this->belongsToMany(Role::class);
44 | }
45 |
46 | // Relation One User With Many Model Product
47 | public function products()
48 | {
49 | return $this->hasMany(Product::class);
50 | }
51 |
52 | //Relation One User With Many Model Message
53 | public function messages()
54 | {
55 | return $this->hasMany(Message::class)->orderByDesc('id');
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/config/hashing.php:
--------------------------------------------------------------------------------
1 | 'bcrypt',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Bcrypt Options
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may specify the configuration options that should be used when
26 | | passwords are hashed using the Bcrypt algorithm. This will allow you
27 | | to control the amount of time it takes to hash the given password.
28 | |
29 | */
30 |
31 | 'bcrypt' => [
32 | 'rounds' => env('BCRYPT_ROUNDS', 10),
33 | ],
34 |
35 | /*
36 | |--------------------------------------------------------------------------
37 | | Argon Options
38 | |--------------------------------------------------------------------------
39 | |
40 | | Here you may specify the configuration options that should be used when
41 | | passwords are hashed using the Argon algorithm. These will allow you
42 | | to control the amount of time it takes to hash the given password.
43 | |
44 | */
45 |
46 | 'argon' => [
47 | 'memory' => 1024,
48 | 'threads' => 2,
49 | 'time' => 2,
50 | ],
51 |
52 | ];
53 |
--------------------------------------------------------------------------------
/database/seeders/UserSeeder.php:
--------------------------------------------------------------------------------
1 | 'مسعود منصوری',
21 | 'family' => '-= M A N S O R Y =-',
22 | 'avatar' => 'mansory.gif',
23 | 'mobile' => '09158007242',
24 | 'email' => 'm@m.com',
25 | 'email_verified_at' => now(),
26 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
27 | 'remember_token' => Str::random(10),
28 | ]);
29 |
30 | User::create([
31 | 'name' => 'علی ریاضی',
32 | 'family' => 'Ali Ronaldo',
33 | 'avatar' => '',
34 | 'mobile' => '09151234567',
35 | 'email' => 'ali@ali.com',
36 | 'email_verified_at' => now(),
37 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
38 | 'remember_token' => Str::random(10),
39 | ]);
40 |
41 | User::create([
42 | 'name' => 'رضا صادقی',
43 | 'family' => 'Meshki Eshghe',
44 | 'avatar' => '',
45 | 'mobile' => '09157654321',
46 | 'email' => 'reza@reza.com',
47 | 'email_verified_at' => now(),
48 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
49 | 'remember_token' => Str::random(10),
50 | ]);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'null'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Broadcast Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the broadcast connections that will be used
26 | | to broadcast events to other systems or over websockets. Samples of
27 | | each available type of connection are provided inside this array.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'pusher' => [
34 | 'driver' => 'pusher',
35 | 'key' => env('PUSHER_APP_KEY'),
36 | 'secret' => env('PUSHER_APP_SECRET'),
37 | 'app_id' => env('PUSHER_APP_ID'),
38 | 'options' => [
39 | 'cluster' => env('PUSHER_APP_CLUSTER'),
40 | 'useTLS' => true,
41 | ],
42 | ],
43 |
44 | 'redis' => [
45 | 'driver' => 'redis',
46 | 'connection' => 'default',
47 | ],
48 |
49 | 'log' => [
50 | 'driver' => 'log',
51 | ],
52 |
53 | 'null' => [
54 | 'driver' => 'null',
55 | ],
56 |
57 | ],
58 |
59 | ];
60 |
--------------------------------------------------------------------------------
/config/sanctum.php:
--------------------------------------------------------------------------------
1 | explode(',', env(
17 | 'SANCTUM_STATEFUL_DOMAINS',
18 | 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1'
19 | )),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Expiration Minutes
24 | |--------------------------------------------------------------------------
25 | |
26 | | This value controls the number of minutes until an issued token will be
27 | | considered expired. If this value is null, personal access tokens do
28 | | not expire. This won't tweak the lifetime of first-party sessions.
29 | |
30 | */
31 |
32 | 'expiration' => null,
33 |
34 | /*
35 | |--------------------------------------------------------------------------
36 | | Sanctum Middleware
37 | |--------------------------------------------------------------------------
38 | |
39 | | When authenticating your first-party SPA with Sanctum you may need to
40 | | customize some of the middleware Sanctum uses while processing the
41 | | request. You may change the middleware listed below as required.
42 | |
43 | */
44 |
45 | 'middleware' => [
46 | 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
47 | 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
48 | ],
49 |
50 | ];
51 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/CategoryController.php:
--------------------------------------------------------------------------------
1 | authorize('browse', Category::class);
19 |
20 | $categories = Category::whereNull('category_id')
21 | ->with('childes')
22 | ->get();
23 |
24 | return response()->json(['data' => $categories]);
25 | }
26 |
27 | //
28 | public function show(Category $category)
29 | {
30 | $this->authorize('read', $category);
31 |
32 | return $category;
33 | }
34 |
35 | //
36 | public function store(Request $request)
37 | {
38 | $this->authorize('add', Category::class);
39 |
40 | $category = Category::create($request->validate([
41 | 'title' => 'required|min:3',
42 | 'category_id' => 'nullable',
43 | ]));
44 |
45 | return response()->json(['data' => $category]);
46 | }
47 |
48 | //
49 | public function update(Request $request, Category $category)
50 | {
51 | $this->authorize('edit', $category);
52 |
53 | $request->validate([
54 | 'title' => 'required|min:3'
55 | ]);
56 |
57 | $category->title = $request->title;
58 | $category->category_id = $request->category_id;
59 | $category->update();
60 |
61 | return response()->json(['data' => $category]);
62 | }
63 |
64 | //
65 | public function destroy(Category $category)
66 | {
67 | $this->authorize('delete', $category);
68 |
69 | $category->delete();
70 |
71 | return null;
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $status = $kernel->handle(
36 | $input = new Symfony\Component\Console\Input\ArgvInput,
37 | new Symfony\Component\Console\Output\ConsoleOutput
38 | );
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Shutdown The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once Artisan has finished running, we will fire off the shutdown events
46 | | so that any final work may be done by the application before we shut
47 | | down the process. This is the last thing to happen to the request.
48 | |
49 | */
50 |
51 | $kernel->terminate($input, $status);
52 |
53 | exit($status);
54 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "type": "project",
4 | "description": "The Laravel Framework.",
5 | "keywords": [
6 | "framework",
7 | "laravel"
8 | ],
9 | "license": "MIT",
10 | "require": {
11 | "php": "^7.3|^8.0",
12 | "fideloper/proxy": "^4.4",
13 | "fruitcake/laravel-cors": "^2.0",
14 | "guzzlehttp/guzzle": "^7.0.1",
15 | "laravel/framework": "^8.12",
16 | "laravel/sanctum": "^2.8",
17 | "laravel/tinker": "^2.5",
18 | "laravel/ui": "^3.1"
19 | },
20 | "require-dev": {
21 | "facade/ignition": "^2.5",
22 | "fakerphp/faker": "^1.9.1",
23 | "mockery/mockery": "^1.4.2",
24 | "nunomaduro/collision": "^5.0",
25 | "phpunit/phpunit": "^9.3.3"
26 | },
27 | "config": {
28 | "optimize-autoloader": true,
29 | "preferred-install": "dist",
30 | "sort-packages": true
31 | },
32 | "extra": {
33 | "laravel": {
34 | "dont-discover": []
35 | }
36 | },
37 | "autoload": {
38 | "psr-4": {
39 | "App\\": "app/",
40 | "Database\\Factories\\": "database/factories/",
41 | "Database\\Seeders\\": "database/seeders/"
42 | }
43 | },
44 | "autoload-dev": {
45 | "psr-4": {
46 | "Tests\\": "tests/"
47 | }
48 | },
49 | "minimum-stability": "dev",
50 | "prefer-stable": true,
51 | "scripts": {
52 | "post-autoload-dump": [
53 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
54 | "@php artisan package:discover --ansi"
55 | ],
56 | "post-root-package-install": [
57 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
58 | ],
59 | "post-create-project-cmd": [
60 | "@php artisan key:generate --ansi"
61 | ]
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class);
50 |
51 | $response = tap($kernel->handle(
52 | $request = Request::capture()
53 | ))->send();
54 |
55 | $kernel->terminate($request, $response);
56 |
--------------------------------------------------------------------------------
/resources/views/auth/passwords/email.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | @if (session('status'))
12 |
13 | {{ session('status') }}
14 |
15 | @endif
16 |
17 |
42 |
43 |
44 |
45 |
46 |
47 | @endsection
48 |
--------------------------------------------------------------------------------
/resources/views/auth/passwords/confirm.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ __('Please confirm your password before continuing.') }}
12 |
13 |
44 |
45 |
46 |
47 |
48 |
49 | @endsection
50 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
42 | }
43 |
44 | /**
45 | * Get a validator for an incoming registration request.
46 | *
47 | * @param array $data
48 | * @return \Illuminate\Contracts\Validation\Validator
49 | */
50 | protected function validator(array $data)
51 | {
52 | return Validator::make($data, [
53 | 'name' => ['required', 'string', 'max:255'],
54 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
55 | 'password' => ['required', 'string', 'min:8', 'confirmed'],
56 | ]);
57 | }
58 |
59 | /**
60 | * Create a new user instance after a valid registration.
61 | *
62 | * @param array $data
63 | * @return \App\Models\User
64 | */
65 | protected function create(array $data)
66 | {
67 | return User::create([
68 | 'name' => $data['name'],
69 | 'email' => $data['email'],
70 | 'password' => Hash::make($data['password']),
71 | ]);
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/MessageController.php:
--------------------------------------------------------------------------------
1 | user()->messages->unique('to_user');
20 | return (MessageResource::collection($message))
21 | ->additional([
22 | 'message'=>[
23 | ['پیام ها از سرور فرستاده شد']
24 | ]
25 | ]);
26 | }
27 |
28 | // id has user
29 | public function show($id)
30 | {
31 | // all auth messages to other user by id
32 | $auth = auth()->user()->messages->where('to_user', $id);
33 | // id just auth->user
34 | $to_my_message = Message::all()->where('user_id', $id)->where('to_user', auth()->id());
35 | // merge
36 | $merge = $auth->merge($to_my_message);
37 | return (MessageResource::collection($merge))
38 | ->additional([
39 | // 'to_my_message' => $to_my_message,
40 | 'message'=>[
41 | ['پیام های با موفقیت ارسال شد.']
42 | ]
43 | ]);
44 | }
45 |
46 | //
47 | public function store(Request $request)
48 | {
49 | return response('store');
50 | }
51 |
52 | //
53 | public function update(Request $request, $id)
54 | {
55 | auth()->user()->messages()->create([
56 | 'to_user' => $id,
57 | 'message' => $request->message,
58 | ]);
59 | return response()->json(['message' => [['پیام شما ارسال شد']]]);
60 | }
61 |
62 | //
63 | public function destroy($id)
64 | {
65 | $message = Message::find($id);
66 | if ($message->user_id === auth()->id()) {
67 | $message->delete();
68 | return response()->json(['message' => [['پیام شما حذف شد']]]);
69 | }
70 | return response()->json(['message' => [['شما پیام این شخص را نمی توانید حذف کنید']]]);
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/app/Models/Role/Permission.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Role::class);
20 | }
21 |
22 | // Please Add Table If Need Key Permission
23 | public static function tables()
24 | {
25 | return [
26 | 'roles' => 'نقش ها',
27 | 'sidebars' => 'ایتم منو',
28 | 'users' => 'کاربران',
29 | 'products' => 'محصولات',
30 | 'categories' => 'دسته ها',
31 | ];
32 | }
33 |
34 | // Auto Create Permission Key
35 | public static function createKey($table, $value)
36 | {
37 | // Create 'browse_' + TableName Key Permission
38 | self::firstOrCreate([
39 | 'key' => 'browse_'.$table, 'display_key' => 'نمایش_'.$value,
40 | 'table_name' => $table, 'display_table' => $value
41 | ]);
42 |
43 | // Create 'read_' + TableName Key Permission
44 | self::firstOrCreate([
45 | 'key' => 'read_'.$table, 'display_key' => 'خواندن_'.$value,
46 | 'table_name' => $table, 'display_table' => $value
47 | ]);
48 |
49 | // Create 'add_' + TableName Key Permission
50 | self::firstOrCreate([
51 | 'key' => 'add_'.$table, 'display_key' => 'افزودن_'.$value,
52 | 'table_name' => $table, 'display_table' => $value
53 | ]);
54 |
55 | // Create 'edit_' + TableName Key Permission
56 | self::firstOrCreate([
57 | 'key' => 'edit_'.$table, 'display_key' => 'ویرایش_'.$value,
58 | 'table_name' => $table, 'display_table' => $value
59 | ]);
60 |
61 | // Create 'delete_' + TableName Key Permission
62 | self::firstOrCreate([
63 | 'key' => 'delete_'.$table, 'display_key' => 'حذف_'.$value,
64 | 'table_name' => $table, 'display_table' => $value
65 | ]);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | reportable(function (Throwable $e) {
42 | //
43 | });
44 | }
45 |
46 | /**
47 | * @note Custom Error, For Custom Message And Custom Http StatusCode
48 | *
49 | * @param $request
50 | * @param Throwable $exception
51 | * @return JsonResponse
52 | * @throws Throwable
53 | */
54 | public function render($request, Throwable $exception)
55 | {
56 | if ($exception instanceof AuthenticationException) {
57 | return response()->json(['message' => 'احراز هویت نشدید!'], 401);
58 | }
59 |
60 | if ($exception instanceof AuthorizationException) {
61 | return response()->json(['message' => 'دسترسی وجود ندارد!'], 403);
62 | }
63 |
64 | if ($exception instanceof ModelNotFoundException) {
65 | return response()->json(['message' => 'همچین مسیری وجود ندارد!'], 404);
66 | }
67 |
68 | if ($exception instanceof ValidationException) {
69 | return response()->json([
70 | 'message' => 'داده های داده شده نامعتبر است.',
71 | 'errors' => $exception->errors(),
72 | ], 422);
73 | }
74 |
75 | return parent::render($request, $exception);
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
-= پنل ادمین با لاراول و ناکست جی اس و ویوتی فای =-
14 |
15 |
نسخه دسکتاپ
16 |
17 |
18 |
نسخه موبایل
19 |
20 |
21 |
22 | ## نمایش دمو
23 | نمایش دمو
24 |
25 | ## راهنمای نصب
26 |
27 |
28 |
آموزش تصویری در کانال یوتیوب
29 |
اگر توسعه دهنده هستید می توانید پروژه را فورک کنید و کانتری بیوت کنید تا از کدهای شما هم دیگران بتوانند استفاده کنند
30 |
این سرور هیچ قالب و ویو ندارد. وفقط اطلاعلات ای پی ای هست. برای فرانت ما از ناکست استفاده کردیم که شما باید پروژه ناکست داخل همین پیج گیت هاب را دریافت کنید و سرور نود را ران کنید
31 |
برای دانلود و اجرای اپلیکیشن ابتدا میتوانید پروژه را کلون یا دانلود زیپ کنید ، سپس باید در ترمینال دستور کامپوزر نصب را اجرا کنید، سپس فایل ای ان وی را باید تنظیم کنید و اطلاعات دیتابیس را ست کنید، و دستور مایگریشن همراه با سیدر را اجرا کنید تا دیتابیس شما با اطلاعات نمونه پر شود
32 |
خب امیدواریم که کارکند. درسته؟
33 |
34 |
35 | ## مجوز برنامه
36 | MIT license این پنل ادمین کد باز هست و تحت مجوز
37 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | configureRateLimiting();
39 |
40 | $this->routes(function () {
41 | Route::prefix('api')
42 | ->middleware('api')
43 | ->namespace($this->namespace)
44 | ->group(base_path('routes/api.php'));
45 |
46 | Route::middleware('web')
47 | ->namespace($this->namespace)
48 | ->group(base_path('routes/web.php'));
49 | /**
50 | * @note For Doc, We Create File Route InTo 'resources/views/doc/route.php'
51 | * @note You Can Remove Down Code, Line 49 - 57
52 | */
53 | if (file_exists(base_path('resources/views/doc/route.php'))) {
54 | Route::middleware('web')
55 | ->prefix('doc')->name('doc.')
56 | ->group(base_path('resources/views/doc/route.php'));
57 | }
58 | });
59 | }
60 |
61 | /**
62 | * Configure the rate limiters for the application.
63 | *
64 | * @return void
65 | */
66 | protected function configureRateLimiting()
67 | {
68 | RateLimiter::for('api', function (Request $request) {
69 | return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
70 | });
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/resources/views/doc/nuxt/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
-= پنل ادمین با لاراول و ناکست جی اس و ویوتی فای =-
33 |
34 |
35 |
36 |
37 |
38 |
41 |
42 |
43 |
44 |
45 |
46 |
آموزش تصویری در کانال یوتیوب
47 |
اگر توسعه دهنده هستید می توانید پروژه را فورک کنید و کانتری بیوت کنید تا از کدهای شما هم دیگران بتوانند استفاده کنند
48 |
این پنل بدون سرور هیچ استفاده ای ندارد شما باید پروژه لاراول داخل همین پیج گیت هاب را هم دریافت کنید و سرور رو ران کنید
49 |
بعد از دریافت باید یارن نصب یا ان پی ام نصب را اجرا کنید و فایل دات ای ان وی را بسازید و محتویات ای ان وی اگزمپل رو کپی کنید
50 |
خب امیدواریم که کارکند. درسته؟
51 |
52 |
53 | @endsection
54 |
--------------------------------------------------------------------------------
/database/seeders/SidebarSeeder.php:
--------------------------------------------------------------------------------
1 | 'داشبورد',
19 | 'slug' => 'panel',
20 | 'prepend_icon' => 'mdi-view-dashboard-variant',
21 | 'append_icon' => '',
22 | 'active' => false,
23 | ]);
24 | $sidebar1->sidebarItems()->create([
25 | 'title' => 'داشبورد',
26 | 'slug' => 'panel',
27 | ]);
28 |
29 | $sidebar2 = Sidebar::create([
30 | 'title' => 'کاربران',
31 | 'slug' => 'user',
32 | 'prepend_icon' => 'mdi-account-multiple',
33 | 'append_icon' => 'mdi-chevron-down',
34 | 'active' => false,
35 | ]);
36 | $sidebar2->sidebarItems()->create([
37 | 'title' => 'نمایش کاربران',
38 | 'slug' => 'user',
39 | ]);
40 | $sidebar2->sidebarItems()->create([
41 | 'title' => 'نقش و دسترسی',
42 | 'slug' => 'role',
43 | ]);
44 |
45 | $sidebar3 = Sidebar::create([
46 | 'title' => 'محصولات',
47 | 'slug' => 'product',
48 | 'prepend_icon' => 'mdi-shopping',
49 | 'append_icon' => 'mdi-chevron-down',
50 | 'active' => false,
51 | ]);
52 | $sidebar3->sidebarItems()->create([
53 | 'title' => 'نمایش محصولات',
54 | 'slug' => 'product',
55 | ]);
56 |
57 | $sidebar4 = Sidebar::create([
58 | 'title' => 'صندوق پیام',
59 | 'slug' => 'message',
60 | 'prepend_icon' => 'mdi-email',
61 | 'append_icon' => '',
62 | 'active' => false,
63 | ]);
64 | $sidebar4->sidebarItems()->create([
65 | 'title' => 'صندوق پیام',
66 | 'slug' => 'message',
67 | ]);
68 |
69 | $sidebar5 = Sidebar::create([
70 | 'title' => 'تنطیمات',
71 | 'slug' => 'setting',
72 | 'prepend_icon' => 'mdi-cog-transfer-outline',
73 | 'append_icon' => 'mdi-chevron-down',
74 | 'active' => false,
75 | ]);
76 | $sidebar5->sidebarItems()->create([
77 | 'title' => 'ایتم های منو',
78 | 'slug' => 'sidebar',
79 | ]);
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/resources/views/welcome.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
11 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
-= پنل ادمین با لاراول و ناکست جی اس و ویوتی فای =-
41 |
42 |
43 |
نمایش دمو
44 |
45 |
46 |
نسخه دسکتاپ
47 |
48 |
49 |
نسخه موبایل
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
تعداد بازدید :
58 |
{{ \App\Models\User\PersonalNumberVisit::find(1)->seen }}
59 |
60 |
61 | @endsection
62 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/SidebarController.php:
--------------------------------------------------------------------------------
1 | authorize('browse', Sidebar::class);
23 |
24 | return (SidebarResource::collection(Sidebar::all()))
25 | ->additional([
26 | 'welcome' => 'خوش آمدید',
27 | 'profile' => UserResource::make(auth()->user()),
28 | 'message'=>[
29 | ['پیام سرور: منو ها با رابطه زیرمنو ها از سرور فرستاده شد']
30 | ]
31 | ]);
32 | }
33 |
34 | // Show One Sidebars
35 | public function show(Sidebar $sidebar)
36 | {
37 | $this->authorize('read', Sidebar::class);
38 |
39 | return (SidebarResource::make(Sidebar::find($sidebar->id)))
40 | ->additional([
41 | 'message'=>[
42 | ['منو ' .$sidebar->title .' با موفقیت ارسال شد.']
43 | ]
44 | ]);
45 | }
46 |
47 | // Save One Sidebars
48 | public function store()
49 | {
50 | $this->authorize('add', Sidebar::class);
51 |
52 | return response()->json(null, 204);
53 | }
54 |
55 | // Show Edit Sidebars, And Validate UpdateSidebar
56 | public function update(UpdateSidebar $request, Sidebar $sidebar)
57 | {
58 | $this->authorize('edit', Sidebar::class);
59 |
60 | $sidebar->update($request->all());
61 | foreach ($request->sub_title as $sub => $value) {
62 | $sidebar->sidebarItems[$sub]->update(['title' => $value]);
63 | // $sidebar->sidebarItems[$sub]->title = $value; $sidebar->push();
64 | }
65 |
66 | return (SidebarResource::make(Sidebar::find($sidebar->id)))
67 | ->additional([
68 | 'message'=>[
69 | ['منو ' .$sidebar->title .' تغییر یافت.']
70 | ]
71 | ]);
72 | }
73 |
74 | // Delete One Sidebars
75 | public function destroy($id)
76 | {
77 | $this->authorize('delete', Sidebar::class);
78 |
79 | return response()->json(null, 204);
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/resources/views/doc/laravel/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
-= پنل ادمین با لاراول و ناکست جی اس و ویوتی فای =-
32 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
42 |
43 |
44 |
45 |
آموزش تصویری در کانال یوتیوب
46 |
اگر توسعه دهنده هستید می توانید پروژه را فورک کنید و کانتری بیوت کنید تا از کدهای شما هم دیگران بتوانند استفاده کنند
47 |
این سرور هیچ قالب و ویو ندارد. وفقط اطلاعلات ای پی ای هست. برای فرانت ما از ناکست استفاده کردیم که شما باید پروژه ناکست داخل همین پیج گیت هاب را دریافت کنید و سرور نود را ران کنید
48 |
برای دانلود و اجرای اپلیکیشن ابتدا میتوانید پروژه را کلون یا دانلود زیپ کنید ، سپس باید در ترمینال دستور کامپوزر نصب را اجرا کنید، سپس فایل ای ان وی را باید تنظیم کنید و اطلاعات دیتابیس را ست کنید، و دستور مایگریشن همراه با سیدر را اجرا کنید تا دیتابیس شما با اطلاعات نمونه پر شود
49 |
خب امیدواریم که کارکند. درسته؟
50 |
51 |
52 | @endsection
53 |
--------------------------------------------------------------------------------
/config/queue.php:
--------------------------------------------------------------------------------
1 | env('QUEUE_CONNECTION', 'sync'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Queue Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may configure the connection information for each server that
24 | | is used by your application. A default configuration has been added
25 | | for each back-end shipped with Laravel. You are free to add more.
26 | |
27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'sync' => [
34 | 'driver' => 'sync',
35 | ],
36 |
37 | 'database' => [
38 | 'driver' => 'database',
39 | 'table' => 'jobs',
40 | 'queue' => 'default',
41 | 'retry_after' => 90,
42 | ],
43 |
44 | 'beanstalkd' => [
45 | 'driver' => 'beanstalkd',
46 | 'host' => 'localhost',
47 | 'queue' => 'default',
48 | 'retry_after' => 90,
49 | 'block_for' => 0,
50 | ],
51 |
52 | 'sqs' => [
53 | 'driver' => 'sqs',
54 | 'key' => env('AWS_ACCESS_KEY_ID'),
55 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
56 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
57 | 'queue' => env('SQS_QUEUE', 'your-queue-name'),
58 | 'suffix' => env('SQS_SUFFIX'),
59 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
60 | ],
61 |
62 | 'redis' => [
63 | 'driver' => 'redis',
64 | 'connection' => 'default',
65 | 'queue' => env('REDIS_QUEUE', 'default'),
66 | 'retry_after' => 90,
67 | 'block_for' => null,
68 | ],
69 |
70 | ],
71 |
72 | /*
73 | |--------------------------------------------------------------------------
74 | | Failed Queue Jobs
75 | |--------------------------------------------------------------------------
76 | |
77 | | These options configure the behavior of failed queue job logging so you
78 | | can control which database and table are used to store the jobs that
79 | | have failed. You may change them to any database / table you wish.
80 | |
81 | */
82 |
83 | 'failed' => [
84 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
85 | 'database' => env('DB_CONNECTION', 'mysql'),
86 | 'table' => 'failed_jobs',
87 | ],
88 |
89 | ];
90 |
--------------------------------------------------------------------------------
/resources/views/auth/passwords/reset.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
65 | @endsection
66 |
--------------------------------------------------------------------------------
/app/Http/Kernel.php:
--------------------------------------------------------------------------------
1 | [
37 | \App\Http\Middleware\EncryptCookies::class,
38 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
39 | \Illuminate\Session\Middleware\StartSession::class,
40 | // \Illuminate\Session\Middleware\AuthenticateSession::class,
41 | \Illuminate\View\Middleware\ShareErrorsFromSession::class,
42 | /**
43 | * @note If Use Two Domain, TurnOff VerifyCsrfToken
44 | */
45 | // \App\Http\Middleware\VerifyCsrfToken::class,
46 | \Illuminate\Routing\Middleware\SubstituteBindings::class,
47 | ],
48 |
49 | 'api' => [
50 | /**
51 | * @note If Use Two Domain, TurnOff Sanctum Middleware
52 | */
53 | // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
54 | 'throttle:api',
55 | \Illuminate\Routing\Middleware\SubstituteBindings::class,
56 | ],
57 | ];
58 |
59 | /**
60 | * The application's route middleware.
61 | *
62 | * These middleware may be assigned to groups or used individually.
63 | *
64 | * @var array
65 | */
66 | protected $routeMiddleware = [
67 | 'auth' => \App\Http\Middleware\Authenticate::class,
68 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
69 | 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
70 | 'can' => \Illuminate\Auth\Middleware\Authorize::class,
71 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
72 | 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
73 | 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
74 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
75 | 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
76 | /**
77 | * @note auth.key: Not Use In Project, Just For Test
78 | * @note browse.admin: This Middleware Has 'browse_admin' Key Permission
79 | */
80 | 'auth.key' => \App\Http\Middleware\AuthKey::class,
81 | 'browse.admin' => \App\Http\Middleware\BrowseAdmin::class,
82 | ];
83 | }
84 |
--------------------------------------------------------------------------------
/config/logging.php:
--------------------------------------------------------------------------------
1 | env('LOG_CHANNEL', 'stack'),
21 |
22 | /*
23 | |--------------------------------------------------------------------------
24 | | Log Channels
25 | |--------------------------------------------------------------------------
26 | |
27 | | Here you may configure the log channels for your application. Out of
28 | | the box, Laravel uses the Monolog PHP logging library. This gives
29 | | you a variety of powerful log handlers / formatters to utilize.
30 | |
31 | | Available Drivers: "single", "daily", "slack", "syslog",
32 | | "errorlog", "monolog",
33 | | "custom", "stack"
34 | |
35 | */
36 |
37 | 'channels' => [
38 | 'stack' => [
39 | 'driver' => 'stack',
40 | 'channels' => ['single'],
41 | 'ignore_exceptions' => false,
42 | ],
43 |
44 | 'single' => [
45 | 'driver' => 'single',
46 | 'path' => storage_path('logs/laravel.log'),
47 | 'level' => env('LOG_LEVEL', 'debug'),
48 | ],
49 |
50 | 'daily' => [
51 | 'driver' => 'daily',
52 | 'path' => storage_path('logs/laravel.log'),
53 | 'level' => env('LOG_LEVEL', 'debug'),
54 | 'days' => 14,
55 | ],
56 |
57 | 'slack' => [
58 | 'driver' => 'slack',
59 | 'url' => env('LOG_SLACK_WEBHOOK_URL'),
60 | 'username' => 'Laravel Log',
61 | 'emoji' => ':boom:',
62 | 'level' => env('LOG_LEVEL', 'critical'),
63 | ],
64 |
65 | 'papertrail' => [
66 | 'driver' => 'monolog',
67 | 'level' => env('LOG_LEVEL', 'debug'),
68 | 'handler' => SyslogUdpHandler::class,
69 | 'handler_with' => [
70 | 'host' => env('PAPERTRAIL_URL'),
71 | 'port' => env('PAPERTRAIL_PORT'),
72 | ],
73 | ],
74 |
75 | 'stderr' => [
76 | 'driver' => 'monolog',
77 | 'handler' => StreamHandler::class,
78 | 'formatter' => env('LOG_STDERR_FORMATTER'),
79 | 'with' => [
80 | 'stream' => 'php://stderr',
81 | ],
82 | ],
83 |
84 | 'syslog' => [
85 | 'driver' => 'syslog',
86 | 'level' => env('LOG_LEVEL', 'debug'),
87 | ],
88 |
89 | 'errorlog' => [
90 | 'driver' => 'errorlog',
91 | 'level' => env('LOG_LEVEL', 'debug'),
92 | ],
93 |
94 | 'null' => [
95 | 'driver' => 'monolog',
96 | 'handler' => NullHandler::class,
97 | ],
98 |
99 | 'emergency' => [
100 | 'path' => storage_path('logs/laravel.log'),
101 | ],
102 | ],
103 |
104 | ];
105 |
--------------------------------------------------------------------------------
/config/cache.php:
--------------------------------------------------------------------------------
1 | env('CACHE_DRIVER', 'file'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Cache Stores
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the cache "stores" for your application as
26 | | well as their drivers. You may even define multiple stores for the
27 | | same cache driver to group types of items stored in your caches.
28 | |
29 | | Supported drivers: "apc", "array", "database", "file",
30 | | "memcached", "redis", "dynamodb"
31 | |
32 | */
33 |
34 | 'stores' => [
35 |
36 | 'apc' => [
37 | 'driver' => 'apc',
38 | ],
39 |
40 | 'array' => [
41 | 'driver' => 'array',
42 | 'serialize' => false,
43 | ],
44 |
45 | 'database' => [
46 | 'driver' => 'database',
47 | 'table' => 'cache',
48 | 'connection' => null,
49 | ],
50 |
51 | 'file' => [
52 | 'driver' => 'file',
53 | 'path' => storage_path('framework/cache/data'),
54 | ],
55 |
56 | 'memcached' => [
57 | 'driver' => 'memcached',
58 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
59 | 'sasl' => [
60 | env('MEMCACHED_USERNAME'),
61 | env('MEMCACHED_PASSWORD'),
62 | ],
63 | 'options' => [
64 | // Memcached::OPT_CONNECT_TIMEOUT => 2000,
65 | ],
66 | 'servers' => [
67 | [
68 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'),
69 | 'port' => env('MEMCACHED_PORT', 11211),
70 | 'weight' => 100,
71 | ],
72 | ],
73 | ],
74 |
75 | 'redis' => [
76 | 'driver' => 'redis',
77 | 'connection' => 'cache',
78 | ],
79 |
80 | 'dynamodb' => [
81 | 'driver' => 'dynamodb',
82 | 'key' => env('AWS_ACCESS_KEY_ID'),
83 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
84 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
85 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
86 | 'endpoint' => env('DYNAMODB_ENDPOINT'),
87 | ],
88 |
89 | ],
90 |
91 | /*
92 | |--------------------------------------------------------------------------
93 | | Cache Key Prefix
94 | |--------------------------------------------------------------------------
95 | |
96 | | When utilizing a RAM based store such as APC or Memcached, there might
97 | | be other applications utilizing the same cache. So, we'll specify a
98 | | value to get prefixed to all our keys so we can avoid collisions.
99 | |
100 | */
101 |
102 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
103 |
104 | ];
105 |
--------------------------------------------------------------------------------
/resources/views/auth/login.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
73 | @endsection
74 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', 'host'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Cloud Filesystem Disk
21 | |--------------------------------------------------------------------------
22 | |
23 | | Many applications store files both locally and in the cloud. For this
24 | | reason, you may specify a default "cloud" driver here. This driver
25 | | will be bound as the Cloud disk implementation in the container.
26 | |
27 | */
28 |
29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Filesystem Disks
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may configure as many filesystem "disks" as you wish, and you
37 | | may even configure multiple disks of the same driver. Defaults have
38 | | been setup for each driver as an example of the required options.
39 | |
40 | | Supported Drivers: "local", "ftp", "sftp", "s3"
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'public' => [
52 | 'driver' => 'local',
53 | 'root' => storage_path('app/public'),
54 | 'url' => env('APP_URL').'/storage',
55 | 'visibility' => 'public',
56 | ],
57 |
58 | /**
59 | * @note host disk has Custom Storage
60 | * @note Should Create SubDomain InTO Your Host
61 | * @note Custom Root: For Save File, And Get Path Of { @see env }
62 | * @note Custom Url: For Read File, And Get Path Of { @see env }
63 | */
64 | 'host' => [
65 | 'driver' => 'local',
66 | // Folder Path, For Save File
67 | 'root' => storage_path(env('APP_STORAGE_ROOT')),
68 | // Url Path, For Read Or Get File
69 | 'url' => env('APP_STORAGE_URL'),
70 | 'visibility' => 'public',
71 | ],
72 |
73 | 's3' => [
74 | 'driver' => 's3',
75 | 'key' => env('AWS_ACCESS_KEY_ID'),
76 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
77 | 'region' => env('AWS_DEFAULT_REGION'),
78 | 'bucket' => env('AWS_BUCKET'),
79 | 'url' => env('AWS_URL'),
80 | 'endpoint' => env('AWS_ENDPOINT'),
81 | ],
82 |
83 | ],
84 |
85 | /*
86 | |--------------------------------------------------------------------------
87 | | Symbolic Links
88 | |--------------------------------------------------------------------------
89 | |
90 | | Here you may configure the symbolic links that will be created when the
91 | | `storage:link` Artisan command is executed. The array keys should be
92 | | the locations of the links and the values should be their targets.
93 | |
94 | */
95 |
96 | 'links' => [
97 | public_path('storage') => storage_path('app/public'),
98 | ],
99 |
100 | ];
101 |
--------------------------------------------------------------------------------
/resources/views/layouts/app.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | @yield('title', 'Laravel Nuxt.js Admin Panel')
11 |
12 |
13 | {{-- --}}
14 |
15 |
16 |
17 |
18 |
19 |
20 | {{-- --}}
21 |
22 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | لاراول ناکست
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
54 |
55 |
56 |
57 | @if (Route::has('doc.laravel.index'))
58 |
59 | لاراول
60 |
61 | @endif
62 |
63 | @if (Route::has('doc.nuxt.index'))
64 |
65 | ناکست
66 |
67 | @endif
68 |
69 |
70 |
71 |
72 |
73 |
74 | @yield('content')
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/config/mail.php:
--------------------------------------------------------------------------------
1 | env('MAIL_MAILER', 'smtp'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Mailer Configurations
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may configure all of the mailers used by your application plus
24 | | their respective settings. Several examples have been configured for
25 | | you and you are free to add your own as your application requires.
26 | |
27 | | Laravel supports a variety of mail "transport" drivers to be used while
28 | | sending an e-mail. You will specify which one you are using for your
29 | | mailers below. You are free to add additional mailers as required.
30 | |
31 | | Supported: "smtp", "sendmail", "mailgun", "ses",
32 | | "postmark", "log", "array"
33 | |
34 | */
35 |
36 | 'mailers' => [
37 | 'smtp' => [
38 | 'transport' => 'smtp',
39 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
40 | 'port' => env('MAIL_PORT', 587),
41 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
42 | 'username' => env('MAIL_USERNAME'),
43 | 'password' => env('MAIL_PASSWORD'),
44 | 'timeout' => null,
45 | 'auth_mode' => null,
46 | ],
47 |
48 | 'ses' => [
49 | 'transport' => 'ses',
50 | ],
51 |
52 | 'mailgun' => [
53 | 'transport' => 'mailgun',
54 | ],
55 |
56 | 'postmark' => [
57 | 'transport' => 'postmark',
58 | ],
59 |
60 | 'sendmail' => [
61 | 'transport' => 'sendmail',
62 | 'path' => '/usr/sbin/sendmail -bs',
63 | ],
64 |
65 | 'log' => [
66 | 'transport' => 'log',
67 | 'channel' => env('MAIL_LOG_CHANNEL'),
68 | ],
69 |
70 | 'array' => [
71 | 'transport' => 'array',
72 | ],
73 | ],
74 |
75 | /*
76 | |--------------------------------------------------------------------------
77 | | Global "From" Address
78 | |--------------------------------------------------------------------------
79 | |
80 | | You may wish for all e-mails sent by your application to be sent from
81 | | the same address. Here, you may specify a name and address that is
82 | | used globally for all e-mails that are sent by your application.
83 | |
84 | */
85 |
86 | 'from' => [
87 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
88 | 'name' => env('MAIL_FROM_NAME', 'Example'),
89 | ],
90 |
91 | /*
92 | |--------------------------------------------------------------------------
93 | | Markdown Mail Settings
94 | |--------------------------------------------------------------------------
95 | |
96 | | If you are using Markdown based email rendering, you may configure your
97 | | theme and component paths here, allowing you to customize the design
98 | | of the emails. Or, you may simply stick with the Laravel defaults!
99 | |
100 | */
101 |
102 | 'markdown' => [
103 | 'theme' => 'default',
104 |
105 | 'paths' => [
106 | resource_path('views/vendor/mail'),
107 | ],
108 | ],
109 |
110 | ];
111 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/RoleController.php:
--------------------------------------------------------------------------------
1 | authorize('browse', Role::class);
24 |
25 | return (RoleResource::collection(Role::all()))
26 | ->additional([
27 | 'message' => [
28 | ['نقش ها با رابطه کلیدها و رابطه با کاربران از سرور فرستاده شد']
29 | ],
30 | ]);
31 | }
32 |
33 | // Show One Role
34 | public function show(Role $role)
35 | {
36 | $this->authorize('read', Role::class);
37 |
38 | return (RoleResource::make(Role::find($role->id)))
39 | ->additional([
40 | 'permissions' => Permission::all(),
41 | 'permissions_selected' => $role->permissions->pluck('id'),
42 | 'permissions_display_table' => $role->permissions->pluck('display_table')->unique()->flatten(),
43 | 'message' => [
44 | ['نقش ' .$role->display_name .' با موفقیت ارسال شد.']
45 | ],
46 | ]);
47 | }
48 |
49 | // Save One Role, And Validate StoreRole
50 | public function store(StoreRole $request)
51 | {
52 | $this->authorize('add', Role::class);
53 |
54 | $role = Role::create($request->all());
55 |
56 | return (RoleResource::make(Role::find($role->id)))
57 | ->additional([
58 | 'message'=>[
59 | ['نقش ' .$role->display_name .' با موفقیت ایجاد شد.']
60 | ]
61 | ])->response()->setStatusCode(201);
62 | }
63 |
64 | // Edit One Role, And Validate UpdateRole
65 | public function update(UpdateRole $request, Role $role)
66 | {
67 | $this->authorize('edit', Role::class);
68 |
69 | $role->update($request->all());
70 |
71 | // Cant Remove Permissions Of Role
72 | if ($role->id == 1) {
73 | return (RoleResource::make(Role::find($role->id)))
74 | ->additional([
75 | 'message'=>[
76 | ['نقش ' .$role->display_name .' تغییر یافت.'],
77 | [' برای تست پنل کلید ها را نقش ادمین نمی توانید بردارید']
78 | ]
79 | ]);
80 | }
81 |
82 | $role->permissions()->sync($request->permissions);
83 |
84 | return (RoleResource::make(Role::find($role->id)))
85 | ->additional([
86 | 'message'=>[
87 | ['نقش ' .$role->display_name .' تغییر یافت.']
88 | ]
89 | ]);
90 | }
91 |
92 | // Delete One Role
93 | public function destroy(Role $role)
94 | {
95 | $this->authorize('delete', Role::class);
96 |
97 | // cant seeder delete
98 | $dontDelete = [1, 2];
99 | if (!in_array($role->id, $dontDelete)) {
100 | $role->delete();
101 | return response()->json([
102 | 'message'=>[
103 | ['پیام سرور: حذف شد']
104 | ]
105 | ], 200);
106 | }
107 |
108 | return response()->json([
109 | 'message'=>[
110 | ['پیام سرور: برای تست پنل نقش حذف نمی شود']
111 | ]
112 | ], 200);
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/resources/views/auth/register.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
77 | @endsection
78 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/ProductController.php:
--------------------------------------------------------------------------------
1 | authorize('browse', Product::class);
24 |
25 | return (ProductResource::collection(Product::all()))
26 | ->additional([
27 | 'message'=>[
28 | ['پیام سرور: محصولات را دریافت کنید.']
29 | ]
30 | ]);
31 | }
32 |
33 | // Show One Product
34 | public function show(Product $product)
35 | {
36 | $this->authorize('read', Product::class);
37 |
38 | return (ProductResource::make(Product::find($product->id)))
39 | ->additional([
40 | 'message'=>[
41 | ['پیام سرور: محصول '.$product->title.' را دریافت کنید.']
42 | ]
43 | ]);
44 | }
45 |
46 | // Save One Product, And Validate StoreProduct
47 | public function store(StoreProduct $request)
48 | {
49 | $this->authorize('add', Product::class);
50 |
51 | $product = new Product();
52 | $product->user_id = auth()->id();
53 | $product->title = $request->title;
54 | $product->body = $request->body;
55 | $product->save();
56 | $product->image = $request->file('image')->store("image/product/{$product->id}");
57 | $product->save();
58 |
59 | return (ProductResource::make(Product::find($product->id)))
60 | ->additional([
61 | 'message'=>[
62 | ['پیام سرور: محصول '.$product->title.' ایجاد شد.']
63 | ]
64 | ])->response()->setStatusCode(201);
65 | }
66 |
67 | // Edit One Product, And Validate UpdateProduct
68 | public function update(UpdateProduct $request, Product $product)
69 | {
70 | $this->authorize('edit', Product::class);
71 |
72 | if ($request->hasFile('image')) {
73 | $path = $request->file('image')->store("image/product/{$product->id}");
74 | Storage::delete($product->image);
75 | } else {
76 | $path = $product->image;
77 | }
78 | $product->update([
79 | 'user_id' => auth()->id(),
80 | 'title' => $request->title,
81 | 'body' => $request->body,
82 | 'image' => $path
83 | ]);
84 |
85 | return (ProductResource::make(Product::find($product->id)))
86 | ->additional([
87 | 'message'=>[
88 | ['پیام سرور: محصول '.$product->title.' ویرایش شد.']
89 | ]
90 | ]);
91 | }
92 |
93 | // Delete One Product
94 | public function destroy(Product $product)
95 | {
96 | $this->authorize('delete', Product::class);
97 |
98 | // cant seeder delete
99 | $dontDelete = [1, 2, 3, 4];
100 | if (!in_array($product->id, $dontDelete)) {
101 | $product->delete();
102 | return response()->json([
103 | 'message'=>[
104 | ['پیام سرور: محصول حذف شد']
105 | ]
106 | ], 200);
107 | }
108 |
109 | return response()->json([
110 | 'message'=>[
111 | ['پیام سرور: برای تست پنل محصول حذف نمی شود']
112 | ]
113 | ], 200);
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/config/auth.php:
--------------------------------------------------------------------------------
1 | [
17 | 'guard' => 'web',
18 | 'passwords' => 'users',
19 | ],
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Authentication Guards
24 | |--------------------------------------------------------------------------
25 | |
26 | | Next, you may define every authentication guard for your application.
27 | | Of course, a great default configuration has been defined for you
28 | | here which uses session storage and the Eloquent user provider.
29 | |
30 | | All authentication drivers have a user provider. This defines how the
31 | | users are actually retrieved out of your database or other storage
32 | | mechanisms used by this application to persist your user's data.
33 | |
34 | | Supported: "session", "token"
35 | |
36 | */
37 |
38 | 'guards' => [
39 | 'web' => [
40 | 'driver' => 'session',
41 | 'provider' => 'users',
42 | ],
43 |
44 | 'api' => [
45 | 'driver' => 'token',
46 | 'provider' => 'users',
47 | 'hash' => false,
48 | ],
49 | ],
50 |
51 | /*
52 | |--------------------------------------------------------------------------
53 | | User Providers
54 | |--------------------------------------------------------------------------
55 | |
56 | | All authentication drivers have a user provider. This defines how the
57 | | users are actually retrieved out of your database or other storage
58 | | mechanisms used by this application to persist your user's data.
59 | |
60 | | If you have multiple user tables or models you may configure multiple
61 | | sources which represent each model / table. These sources may then
62 | | be assigned to any extra authentication guards you have defined.
63 | |
64 | | Supported: "database", "eloquent"
65 | |
66 | */
67 |
68 | 'providers' => [
69 | 'users' => [
70 | 'driver' => 'eloquent',
71 | 'model' => App\Models\User\User::class,
72 | ],
73 |
74 | // 'users' => [
75 | // 'driver' => 'database',
76 | // 'table' => 'users',
77 | // ],
78 | ],
79 |
80 | /*
81 | |--------------------------------------------------------------------------
82 | | Resetting Passwords
83 | |--------------------------------------------------------------------------
84 | |
85 | | You may specify multiple password reset configurations if you have more
86 | | than one user table or model in the application and you want to have
87 | | separate password reset settings based on the specific user types.
88 | |
89 | | The expire time is the number of minutes that the reset token should be
90 | | considered valid. This security feature keeps tokens short-lived so
91 | | they have less time to be guessed. You may change this as needed.
92 | |
93 | */
94 |
95 | 'passwords' => [
96 | 'users' => [
97 | 'provider' => 'users',
98 | 'table' => 'password_resets',
99 | 'expire' => 60,
100 | 'throttle' => 60,
101 | ],
102 | ],
103 |
104 | /*
105 | |--------------------------------------------------------------------------
106 | | Password Confirmation Timeout
107 | |--------------------------------------------------------------------------
108 | |
109 | | Here you may define the amount of seconds before a password confirmation
110 | | times out and the user is prompted to re-enter their password via the
111 | | confirmation screen. By default, the timeout lasts for three hours.
112 | |
113 | */
114 |
115 | 'password_timeout' => 10800,
116 |
117 | ];
118 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Panel/UserController.php:
--------------------------------------------------------------------------------
1 | authorize('browse', User::class);
26 |
27 | return (UserResource::collection(User::all()))
28 | ->additional([
29 | 'message'=>[
30 | ['کاربران با رابطه نقش ها از سرور فرستاده شد']
31 | ]
32 | ]);
33 | }
34 |
35 | // Show One User
36 | public function show(User $user)
37 | {
38 | $this->authorize('read', User::class);
39 |
40 | return (UserResource::make(User::find($user->id)))
41 | ->additional([
42 | 'roles' => RoleResource::collection(Role::all()),
43 | 'roles_selected' => $user->roles->flatten()->pluck('id')->toArray(),
44 | 'message'=>[
45 | ['کاربر ' .$user->name .' با موفقیت ارسال شد.']
46 | ]
47 | ]);
48 | }
49 |
50 | // Save One User
51 | public function store(StoreUser $request)
52 | {
53 | $this->authorize('add', User::class);
54 |
55 | $user = User::create([
56 | 'name' => $request->name,
57 | 'email' => $request->email,
58 | 'password' => bcrypt($request->password),
59 | ]);
60 |
61 | return (UserResource::make(User::find($user->id)))
62 | ->additional([
63 | 'message'=>[
64 | ['کاربر ' .$user->name .' با موفقیت ایجاد شد.']
65 | ]
66 | ])->response()->setStatusCode(201);
67 | }
68 |
69 | // Edit One User
70 | public function update(UpdateUser $request, User $user)
71 | {
72 | $this->authorize('edit', User::class);
73 |
74 | if ($request->hasFile('avatar')) {
75 | $path = $request->file('avatar')->store("image/user/{$user->id}");
76 | Storage::delete($user->avatar);
77 | } else {
78 | $path = $user->avatar;
79 | }
80 | $user->update([
81 | 'name' => $request->name,
82 | 'family' => $request->family,
83 | 'mobile' => $request->mobile,
84 | 'avatar' => $path
85 | ]);
86 |
87 | $roles = json_decode($request->roles);
88 |
89 | // Cant Remove Role Admin Of User
90 | if ($user->id == 1) {
91 | if (! in_array(1, $roles)) {
92 | return (UserResource::make(User::find($user->id)))
93 | ->additional([
94 | 'message'=>[
95 | ['پیام سرور: برای تست پنل نقش ادمین را نمی توانید بردارید']
96 | ]
97 | ]);
98 | }
99 | }
100 |
101 | $user->roles()->sync($roles);
102 |
103 | return (UserResource::make(User::find($user->id)))
104 | ->additional([
105 | 'message'=>[
106 | ['کاربر ' .$user->name .' تغییر یافت.']
107 | ]
108 | ]);
109 | }
110 |
111 | // Delete One User
112 | public function destroy(User $user)
113 | {
114 | $this->authorize('delete', User::class);
115 |
116 | // cant seeder delete
117 | $dontDelete = [1, 2, 3];
118 | if (!in_array($user->id, $dontDelete)) {
119 | $user->delete();
120 | return response()->json([
121 | 'message'=>[
122 | ['پیام سرور: حذف شد']
123 | ]
124 | ], 200);
125 | }
126 |
127 | return response()->json([
128 | 'message'=>[
129 | ['پیام سرور: برای تست پنل کاربر حذف نمی شود']
130 | ]
131 | ], 200);
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | env('DB_CONNECTION', 'mysql'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Database Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here are each of the database connections setup for your application.
26 | | Of course, examples of configuring each database platform that is
27 | | supported by Laravel is shown below to make development simple.
28 | |
29 | |
30 | | All database work in Laravel is done through the PHP PDO facilities
31 | | so make sure you have the driver for your particular database of
32 | | choice installed on your machine before you begin development.
33 | |
34 | */
35 |
36 | 'connections' => [
37 |
38 | 'sqlite' => [
39 | 'driver' => 'sqlite',
40 | 'url' => env('DATABASE_URL'),
41 | 'database' => env('DB_DATABASE', database_path('database.sqlite')),
42 | 'prefix' => '',
43 | 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
44 | ],
45 |
46 | 'mysql' => [
47 | 'driver' => 'mysql',
48 | 'url' => env('DATABASE_URL'),
49 | 'host' => env('DB_HOST', '127.0.0.1'),
50 | 'port' => env('DB_PORT', '3306'),
51 | 'database' => env('DB_DATABASE', 'forge'),
52 | 'username' => env('DB_USERNAME', 'forge'),
53 | 'password' => env('DB_PASSWORD', ''),
54 | 'unix_socket' => env('DB_SOCKET', ''),
55 | 'charset' => 'utf8mb4',
56 | 'collation' => 'utf8mb4_unicode_ci',
57 | 'prefix' => '',
58 | 'prefix_indexes' => true,
59 | 'strict' => true,
60 | 'engine' => null,
61 | 'options' => extension_loaded('pdo_mysql') ? array_filter([
62 | PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
63 | ]) : [],
64 | ],
65 |
66 | 'pgsql' => [
67 | 'driver' => 'pgsql',
68 | 'url' => env('DATABASE_URL'),
69 | 'host' => env('DB_HOST', '127.0.0.1'),
70 | 'port' => env('DB_PORT', '5432'),
71 | 'database' => env('DB_DATABASE', 'forge'),
72 | 'username' => env('DB_USERNAME', 'forge'),
73 | 'password' => env('DB_PASSWORD', ''),
74 | 'charset' => 'utf8',
75 | 'prefix' => '',
76 | 'prefix_indexes' => true,
77 | 'schema' => 'public',
78 | 'sslmode' => 'prefer',
79 | ],
80 |
81 | 'sqlsrv' => [
82 | 'driver' => 'sqlsrv',
83 | 'url' => env('DATABASE_URL'),
84 | 'host' => env('DB_HOST', 'localhost'),
85 | 'port' => env('DB_PORT', '1433'),
86 | 'database' => env('DB_DATABASE', 'forge'),
87 | 'username' => env('DB_USERNAME', 'forge'),
88 | 'password' => env('DB_PASSWORD', ''),
89 | 'charset' => 'utf8',
90 | 'prefix' => '',
91 | 'prefix_indexes' => true,
92 | ],
93 |
94 | ],
95 |
96 | /*
97 | |--------------------------------------------------------------------------
98 | | Migration Repository Table
99 | |--------------------------------------------------------------------------
100 | |
101 | | This table keeps track of all the migrations that have already run for
102 | | your application. Using this information, we can determine which of
103 | | the migrations on disk haven't actually been run in the database.
104 | |
105 | */
106 |
107 | 'migrations' => 'migrations',
108 |
109 | /*
110 | |--------------------------------------------------------------------------
111 | | Redis Databases
112 | |--------------------------------------------------------------------------
113 | |
114 | | Redis is an open source, fast, and advanced key-value store that also
115 | | provides a richer body of commands than a typical key-value system
116 | | such as APC or Memcached. Laravel makes it easy to dig right in.
117 | |
118 | */
119 |
120 | 'redis' => [
121 |
122 | 'client' => env('REDIS_CLIENT', 'phpredis'),
123 |
124 | 'options' => [
125 | 'cluster' => env('REDIS_CLUSTER', 'redis'),
126 | 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
127 | ],
128 |
129 | 'default' => [
130 | 'url' => env('REDIS_URL'),
131 | 'host' => env('REDIS_HOST', '127.0.0.1'),
132 | 'password' => env('REDIS_PASSWORD', null),
133 | 'port' => env('REDIS_PORT', '6379'),
134 | 'database' => env('REDIS_DB', '0'),
135 | ],
136 |
137 | 'cache' => [
138 | 'url' => env('REDIS_URL'),
139 | 'host' => env('REDIS_HOST', '127.0.0.1'),
140 | 'password' => env('REDIS_PASSWORD', null),
141 | 'port' => env('REDIS_PORT', '6379'),
142 | 'database' => env('REDIS_CACHE_DB', '1'),
143 | ],
144 |
145 | ],
146 |
147 | ];
148 |
--------------------------------------------------------------------------------
/config/session.php:
--------------------------------------------------------------------------------
1 | env('SESSION_DRIVER', 'file'),
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Session Lifetime
26 | |--------------------------------------------------------------------------
27 | |
28 | | Here you may specify the number of minutes that you wish the session
29 | | to be allowed to remain idle before it expires. If you want them
30 | | to immediately expire on the browser closing, set that option.
31 | |
32 | */
33 |
34 | 'lifetime' => env('SESSION_LIFETIME', 120),
35 |
36 | 'expire_on_close' => false,
37 |
38 | /*
39 | |--------------------------------------------------------------------------
40 | | Session Encryption
41 | |--------------------------------------------------------------------------
42 | |
43 | | This option allows you to easily specify that all of your session data
44 | | should be encrypted before it is stored. All encryption will be run
45 | | automatically by Laravel and you can use the Session like normal.
46 | |
47 | */
48 |
49 | 'encrypt' => false,
50 |
51 | /*
52 | |--------------------------------------------------------------------------
53 | | Session File Location
54 | |--------------------------------------------------------------------------
55 | |
56 | | When using the native session driver, we need a location where session
57 | | files may be stored. A default has been set for you but a different
58 | | location may be specified. This is only needed for file sessions.
59 | |
60 | */
61 |
62 | 'files' => storage_path('framework/sessions'),
63 |
64 | /*
65 | |--------------------------------------------------------------------------
66 | | Session Database Connection
67 | |--------------------------------------------------------------------------
68 | |
69 | | When using the "database" or "redis" session drivers, you may specify a
70 | | connection that should be used to manage these sessions. This should
71 | | correspond to a connection in your database configuration options.
72 | |
73 | */
74 |
75 | 'connection' => env('SESSION_CONNECTION', null),
76 |
77 | /*
78 | |--------------------------------------------------------------------------
79 | | Session Database Table
80 | |--------------------------------------------------------------------------
81 | |
82 | | When using the "database" session driver, you may specify the table we
83 | | should use to manage the sessions. Of course, a sensible default is
84 | | provided for you; however, you are free to change this as needed.
85 | |
86 | */
87 |
88 | 'table' => 'sessions',
89 |
90 | /*
91 | |--------------------------------------------------------------------------
92 | | Session Cache Store
93 | |--------------------------------------------------------------------------
94 | |
95 | | While using one of the framework's cache driven session backends you may
96 | | list a cache store that should be used for these sessions. This value
97 | | must match with one of the application's configured cache "stores".
98 | |
99 | | Affects: "apc", "dynamodb", "memcached", "redis"
100 | |
101 | */
102 |
103 | 'store' => env('SESSION_STORE', null),
104 |
105 | /*
106 | |--------------------------------------------------------------------------
107 | | Session Sweeping Lottery
108 | |--------------------------------------------------------------------------
109 | |
110 | | Some session drivers must manually sweep their storage location to get
111 | | rid of old sessions from storage. Here are the chances that it will
112 | | happen on a given request. By default, the odds are 2 out of 100.
113 | |
114 | */
115 |
116 | 'lottery' => [2, 100],
117 |
118 | /*
119 | |--------------------------------------------------------------------------
120 | | Session Cookie Name
121 | |--------------------------------------------------------------------------
122 | |
123 | | Here you may change the name of the cookie used to identify a session
124 | | instance by ID. The name specified here will get used every time a
125 | | new session cookie is created by the framework for every driver.
126 | |
127 | */
128 |
129 | 'cookie' => env(
130 | 'SESSION_COOKIE',
131 | Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
132 | ),
133 |
134 | /*
135 | |--------------------------------------------------------------------------
136 | | Session Cookie Path
137 | |--------------------------------------------------------------------------
138 | |
139 | | The session cookie path determines the path for which the cookie will
140 | | be regarded as available. Typically, this will be the root path of
141 | | your application but you are free to change this when necessary.
142 | |
143 | */
144 |
145 | 'path' => '/',
146 |
147 | /*
148 | |--------------------------------------------------------------------------
149 | | Session Cookie Domain
150 | |--------------------------------------------------------------------------
151 | |
152 | | Here you may change the domain of the cookie used to identify a session
153 | | in your application. This will determine which domains the cookie is
154 | | available to in your application. A sensible default has been set.
155 | |
156 | */
157 |
158 | 'domain' => env('SESSION_DOMAIN', null),
159 |
160 | /*
161 | |--------------------------------------------------------------------------
162 | | HTTPS Only Cookies
163 | |--------------------------------------------------------------------------
164 | |
165 | | By setting this option to true, session cookies will only be sent back
166 | | to the server if the browser has a HTTPS connection. This will keep
167 | | the cookie from being sent to you if it can not be done securely.
168 | |
169 | */
170 |
171 | 'secure' => env('SESSION_SECURE_COOKIE'),
172 |
173 | /*
174 | |--------------------------------------------------------------------------
175 | | HTTP Access Only
176 | |--------------------------------------------------------------------------
177 | |
178 | | Setting this value to true will prevent JavaScript from accessing the
179 | | value of the cookie and the cookie will only be accessible through
180 | | the HTTP protocol. You are free to modify this option if needed.
181 | |
182 | */
183 |
184 | 'http_only' => true,
185 |
186 | /*
187 | |--------------------------------------------------------------------------
188 | | Same-Site Cookies
189 | |--------------------------------------------------------------------------
190 | |
191 | | This option determines how your cookies behave when cross-site requests
192 | | take place, and can be used to mitigate CSRF attacks. By default, we
193 | | will set this value to "lax" since this is a secure default value.
194 | |
195 | | Supported: "lax", "strict", "none", null
196 | |
197 | */
198 |
199 | 'same_site' => 'lax',
200 |
201 | ];
202 |
--------------------------------------------------------------------------------
/resources/lang/fa/validation-inline.php:
--------------------------------------------------------------------------------
1 | 'این مقدار باید پذیرفته شده باشد.',
17 | 'active_url' => 'این مقدار یک آدرس معتبر نیست.',
18 | 'after' => 'این مقدار باید یک تاریخ بعد از :date باشد.',
19 | 'after_or_equal' => 'این مقدار باید یک تاریخ مساوی یا بعد از :date باشد.',
20 | 'alpha' => 'این مقدار تنها میتواند شامل حروف باشد.',
21 | 'alpha_dash' => 'این مقدار تنها میتواند شامل حروف، اعداد، خط تیره و زیرخط باشد.',
22 | 'alpha_num' => 'این مقداز تنها میتواند شامل حروف و اعداد باشد.',
23 | 'array' => 'این مقدار باید یک آرایه باشد.',
24 | 'before' => 'این مقدار باید یک تاریخ قبل از :date باشد.',
25 | 'before_or_equal' => 'این مقدار باید یک تاریخ مساوی یا قبل از :date باشد.',
26 | 'between' => [
27 | 'numeric' => 'این مقدار باید بین :min و :max باشد.',
28 | 'file' => 'حجم این فایل باید بین :min و :max کیلوبایت باشد.',
29 | 'string' => 'این رشته باید بین :min و :max حرف داشته باشد.',
30 | 'array' => 'این مقدار باید بین :min و :max گزینه داشته باشد.',
31 | ],
32 | 'boolean' => 'این مقدار باید حتما true و یا false باشد.',
33 | 'confirmed' => 'با مقدار تکرار همخوانی ندارد.',
34 | 'date' => 'این مقدار یک تاریخ معبتر نیست.',
35 | 'date_equals' => 'این مقدار باید یک تاریخ مساوی با :date باشد.',
36 | 'date_format' => 'این مقدار با فرمت :format همخوانی ندارد.',
37 | 'different' => 'این مقدار باید متفاوت از :other باشد.',
38 | 'digits' => 'این مقدار باید :digits رقمی باشد.',
39 | 'digits_between' => 'تعداد ارقام این مقدار باید بین :min و :max باشد.',
40 | 'dimensions' => 'ابعاد این عکس نامعتبر است.',
41 | 'distinct' => 'مقدار این ورودی تکراری است.',
42 | 'email' => 'این مقدار باید یک آدرس ایمیل معتبر باشد.',
43 | 'ends_with' => 'این مقدار باید با یکی از عبارت های روبرو پایان یابد: :values.',
44 | 'exists' => 'مقدار انتخابی نا معتبر است.',
45 | 'file' => 'این ورودی باید یک فایل باشد.',
46 | 'filled' => 'این ورودی باید یک مقدار داشته باشد.',
47 | 'gt' => [
48 | 'numeric' => 'مقدار ورودی باید بزرگتر از :value باشد.',
49 | 'file' => 'حجم فایل ورودی باید بزرگتر از :value کیلوبایت باشد.',
50 | 'string' => 'تعداد حروف رشته ورودی باید بیشتر از :value باشد.',
51 | 'array' => 'مقدار ورودی باید بیشتر از :value گزینه داشته باشد.',
52 | ],
53 | 'gte' => [
54 | 'numeric' => 'مقدار ورودی باید بزرگتر یا مساوی :value باشد.',
55 | 'file' => 'حجم فایل ورودی باید بیشتر یا مساوی :value کیلوبایت باشد.',
56 | 'string' => 'تعداد حروف رشته ورودی باید بیشتر یا مساوی :value باشد.',
57 | 'array' => 'مقدار ورودی باید :value گزینه یا بیشتر داشته باشد.',
58 | ],
59 | 'image' => 'این مقدار باید یک عکس باشد.',
60 | 'in' => 'مقدار انتخابی نامعتبر است.',
61 | 'in_array' => 'این مقدار در :other موجود نیست.',
62 | 'integer' => 'این مقدار باید یک عدد صحیح باشد.',
63 | 'ip' => 'این مقدار باید یک آدرس IP معتبر باشد.',
64 | 'ipv4' => 'این مقدار باید یک آدرس IPv4 معتبر باشد.',
65 | 'ipv6' => 'این مقدار باید یک آدرس IPv6 معتبر باشد.',
66 | 'json' => 'این مقدار باید یک رشته معتبر JSON باشد.',
67 | 'lt' => [
68 | 'numeric' => 'مقدار ورودی باید کمتر از :value باشد.',
69 | 'file' => 'حجم فایل ورودی باید کمتر از :value کیلوبایت باشد.',
70 | 'string' => 'تعداد حروف رشته ورودی باید کمتر از :value باشد.',
71 | 'array' => 'مقدار ورودی باید کمتر از :value گزینه داشته باشد.',
72 | ],
73 | 'lte' => [
74 | 'numeric' => 'مقدار ورودی باید کمتر یا مساوی :value باشد.',
75 | 'file' => 'حجم فایل ورودی باید کمتر یا مساوی :value کیلوبایت باشد.',
76 | 'string' => 'تعداد حروف رشته ورودی باید کمتر یا مساوی :value باشد.',
77 | 'array' => 'مقدار ورودی باید :value گزینه یا کمتر داشته باشد.',
78 | ],
79 | 'max' => [
80 | 'numeric' => 'مقدار ورودی نباید بزرگتر از :max باشد.',
81 | 'file' => 'حجم فایل ورودی نباید بیشتر از :max کیلوبایت باشد.',
82 | 'string' => 'تعداد حروف رشته ورودی نباید بیشتر از :max باشد.',
83 | 'array' => 'مقدار ورودی نباید بیشتر از :max گزینه داشته باشد.',
84 | ],
85 | 'mimes' => 'این مقدار باید یک فایل از این انواع باشد: :values.',
86 | 'mimetypes' => 'این مقدار باید یک فایل از این انواع باشد: :values.',
87 | 'min' => [
88 | 'numeric' => 'مقدار ورودی باید حداقل :min باشد.',
89 | 'file' => 'حجم فایل ورودی باید حداقل :min کیلوبایت باشد.',
90 | 'string' => 'رشته ورودی باید حداقل :min حرف داشته باشد.',
91 | 'array' => 'مقدار ورودی باید حداقل :min گزینه داشته باشد.',
92 | ],
93 | 'multiple_of' => 'The value must be a multiple of :value',
94 | 'not_in' => 'گزینه انتخابی نامعتبر است.',
95 | 'not_regex' => 'این فرمت نامعتبر است.',
96 | 'numeric' => 'این مقدار باید عددی باشد.',
97 | 'password' => 'رمزعبور اشتباه است.',
98 | 'present' => 'این مقدار باید وارد شده باشد.',
99 | 'regex' => 'این فرمت نامعتبر است.',
100 | 'required' => 'این مقدار ضروری است.',
101 | 'required_if' => 'این مقدار ضروری است وقتی که :other برابر :value است.',
102 | 'required_unless' => 'این مقدار ضروری است مگر اینکه :other برابر :values باشد.',
103 | 'required_with' => 'این مقدار ضروری است وقتی که :values وارد شده باشد.',
104 | 'required_with_all' => 'این مقدار ضروری است وقتی که مقادیر :values وارد شده باشند.',
105 | 'required_without' => 'این مقدار ضروری است وقتی که :values وارد نشده باشد.',
106 | 'required_without_all' => 'این مقدار ضروری است وقتی که هیچکدام از :values وارد نشده باشند.',
107 | 'same' => 'مقدار این ورودی باید یکی از مقدار های :other باشد.',
108 | 'size' => [
109 | 'numeric' => 'مقدار ورودی باید :size باشد.',
110 | 'file' => 'حجم فایل ورودی باید :size کیلوبایت باشد.',
111 | 'string' => 'طول رشته ورودی باید :size حرف باشد.',
112 | 'array' => 'مقدار ورودی باید :size گزینه داشته باشد.',
113 | ],
114 | 'starts_with' => 'این مقدار باید با یکی از گزینه های روبرو شروع شود: :values.',
115 | 'string' => 'این مقدار باید یک رشته باشد.',
116 | 'timezone' => 'این مقدار باید یک منطقه زمانی باشد.',
117 | 'unique' => 'این مقدار قبلا استفاده شده.',
118 | 'uploaded' => 'این ورودی بارگزاری نشد.',
119 | 'url' => 'این فرمت نامعتبر است.',
120 | 'uuid' => 'این مقدار باید یک UUID معتبر باشد.',
121 |
122 | /*
123 | |--------------------------------------------------------------------------
124 | | Custom Validation Language Lines
125 | |--------------------------------------------------------------------------
126 | |
127 | | Here you may specify custom validation messages for attributes using the
128 | | convention "attribute.rule" to name the lines. This makes it quick to
129 | | specify a specific custom language line for a given attribute rule.
130 | |
131 | */
132 |
133 | 'custom' => [
134 | 'attribute-name' => [
135 | 'rule-name' => 'custom-message',
136 | ],
137 | ],
138 |
139 | ];
140 |
--------------------------------------------------------------------------------