پیاده‌سازی دیتابیس ACL

زمان قرارگیری : 23 فروردین 1399
زمان این قسمت : 16:50
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

در این جلسه جداولی که برای پیاده‌سازی سیستم سطوح دسترسی نیاز است رو پیاده خواهیم کار تا شما با ساختار دیتابیس این سیستم آشنا شوید.

بخش اول
مقدمات
رایگان 09:10
بخش ششم
مفاهیم هسته لاراول
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 328 نفر
قیمت دوره 259000 تومان
وضعیت دوره در حال برگزاری
زمان کل دوره 26:39:36
تعداد قسمت‌ها 117
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

اگر سوال و مشکلی یا حتی بحثی در یکی از حوزه‌های برنامه‌نویسی دارید این بخش به شما کمک ویژه‌ای خواهد کرد

دورهای پیشنهادی

مشاهده همه دوره ها
آشنایی با امکانات جدید لاراول 7

آشنایی با امکانات جدید لاراول 7

لاراول ۷ به تازگی توسط تیم توسعه دهنده لاراول معرفی شده، ما قصد داریم در این دوره امکانات جدیدی که به واسطه لاراول ۷ در اختیار توسعه دهندگان قرار گرفت...

ساخت Api با Laravel و GraphQl

ساخت Api با Laravel و GraphQl

graphQl یک ابزار جدید برای ایجاد کردن Api پیشرفته برای برنامه های ماست که توسط فیسبوک معرفی شده است.  این ابزار به عنوان یک Query language شناخته میشو...

دسترسی رایگان برای اعضای ویژه
ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

ساخت یک وبسایت آموزشی (فروشگاهی) با لاراول

این دوره یک دوره کامل برای افرادی است که میخواهند لاراول را به درستی آموزش ببینند بعد از دوره آشنای با لاراول که بصورت رایگان در دسترس همگان قرار گرفت...

ساخت Restful Api با Laravel و Lumen

ساخت Restful Api با Laravel و Lumen

به زبان ساده، APIها (مخفف Application Programming Interface) رابط‌هایی نرم‌افزاری هستند که ارتباط بین نرم‌افزارهای مختلف را پیاده‌سازی می‌کنند. در دنی...

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
محسن مهری
2 هفته پیش

سلام استاد موسوی عزیز
آقا من دقیقا خط کدهای شما رو کپی زدم و گذاشتم توی پروژم و کار میکرد و تمامی دستورات refresh,fresh,rollback همه به خوبی کار میکرد
اما یهویی خیلی بی معنی بهم ارور زیر رو نشون میده ، جالبه من حتی دستوری که میزنم ب migrate ها ربطی نداره و فقط میگم ورژن لاراول رو نشون بده اما باز هم به من ارور زیر رو نشون میده (نام دیتابسیم pe7 ) :

 SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pe7.permissions' do
esn't exist (SQL: select * from `permissions`)

  at F:\pe7\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll
 format the error
    668|         // message to include the bindings with SQL, which will make th
is exception a
    669|         // lot more helpful to the developer instead of just the databa
se's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675|

  • A table was not found: You might have forgotten to run your migrations. You
can run your migrations using `php artisan migrate`.
    https://laravel.com/docs/master/migrations#running-migrations

  1   [internal]:0
      Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(
App\Providers\AuthServiceProvider))

  2   F:\pe7\vendor\laravel\framework\src\Illuminate\Database\Connection.php:331

      PDOException::("SQLSTATE[42S02]: Base table or view not found: 1146 Table
'pe7.permissions' doesn't exist")
آفلاین
user-avatar
حسام موسوی
2 هفته پیش

وارد authServiceProvider بشید و کد مربوط به gate رو غیرفعال کنید حل میشه این داستان

آفلاین
user-avatar
پوریا
3 ماه پیش

سلام با تشکر آموزش عالی شما

موقع مایگریشن به این خطا بر میخورم، خیلی تغییرات هم اعمال کردم نشد متاسفانه :)

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1005 Can't create table `table_test`.`#sql-168c_dce` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `permission_user` add constraint `permission_user_user_id_foreig
n` foreign key (`user_id`) references `users` (`id`) on delete cascade)
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

سلام کدتون رو قرار بدید ببینیم چیکار کردید

آفلاین
user-avatar
پوریا
3 ماه پیش

از لاراول 5.8 دارم استفاده میکنم، آپشن جدیدی هست که در 5.8 نباشه ؟

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePermissionsAndRolesTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('permissions', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('label')->nullable();
            $table->timestamps();
        });

        Schema::create('permission_user' , function(Blueprint $table) {
            $table->unsignedBigInteger('permission_id');
            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->primary(['permission_id' , 'user_id']);
        });

        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('label')->nullable();
            $table->timestamps();
        });

        Schema::create('permission_role' , function(Blueprint $table) {
            $table->unsignedBigInteger('permission_id');
            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
            $table->unsignedBigInteger('role_id');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->primary(['permission_id' , 'role_id']);
        });

        Schema::create('role_user' , function(Blueprint $table) {
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->unsignedBigInteger('role_id');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->primary(['user_id' , 'role_id']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('permission_user');
        Schema::dropIfExists('role_user');
        Schema::dropIfExists('permission_role');
        Schema::dropIfExists('roles');
        Schema::dropIfExists('permissions');
    }
}
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

مایگریشن جدول کاربر رو هم بفرستید

آفلاین
user-avatar
پوریا
3 ماه پیش

جدول یوزر رو به صورت دستی PHPMYADMIN درست کردم .

آفلاین
user-avatar
پوریا
3 ماه پیش

متوجه شدم مشکل از unsignedBigInteger بود که در جدول user int بود، از unsignedInteger استفاده کردم .

همچنین از این کد

            $table->increments('id');

به جای :

 $table->id();

استفاده کردم .

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

خوب کارو خراب کردید
فیلد id جدول user باید به شکل biginteger باشه و همچنین به شکل unsigned باشه اگر قرار هست کلید خارجی با user داشته باشید

آفلاین
user-avatar
پوریا
3 ماه پیش

از قبل جدول Users رو داشتم و دارای دیتا هم هست، چطوری میتونم تغییر بدم تبدیل کنم به Biginteger ؟ ( با جدول دیگه رابطه داره نمیشه )

آفلاین
user-avatar
پوریا
3 ماه پیش

اگه id باقی جداول رو هم unsignedInteger تعریف کنم مشکل حل میشه ؟

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

کاری نباس به کدهای permission و جداول داشته باشید فقط باید فیلد id جدول user تغییر کنه
مگر با phpmyadmin کار نمیکنید ؟ برید خوب به قسمت structure مقدار id رو به bigint و اندازش رو به 20 تغییر بدید و روی حالت unsigned قرارش بدید

آفلاین
user-avatar
پوریا
3 ماه پیش

بله متوجه شدم :) اما چون id جدول کاربران FOREIGN_KEY با یک جدول دیگه داره اجازه تغییر از int به bigint رو نمیده متاسفانه
سوال من این هست که آیا حتما باید از bigint برای چند به چند استفاده کنیم ؟ INT نمیشه ؟
متشکرم

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

برای ایجاد رابطه از طریق لاراول بله در غیر این صورت میتونید کلید خارجی ها رو با مایگریشن نسازید و برید با phpmyadmin اینکارو انجام بدید

آفلاین
user-avatar
محمد مهدی
3 ماه پیش

سلام و درود

استاد فرق این دو تا با هم چیه؟ کجا ها استفاده میشه هر کدومش؟

$table->primary(['permission_id','user_id']);
            &&
$table->unique(['permission_id','user_id']);

و یه چیز دیگه اگه توضیح بدین مقادیر که ( )onDelete میگیره چیه؟ آخه در همه جا شما از cascade استفاده کردین، اگه درآینده اینم در نظر بگیرید ممنون میشم.

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

انتظار میره شما mysql بلد باشید و این دوره رو مشاهده کنید !
primary برای اینکه بگیم هیچ دو سطری نمیتونن مقدار یکسان permission_id و user_id داشته باشن
یعنی اگر در سطر اول وارد کردید
۱ - ۱
در سطر دوم نمیشه
۱ - ۱ وارد کرد ! مثلا میشه گفت ۱ - ۲ و ۱ - ۳
اما در حالت unique که مشخصه تک تک فیلدها باید یکتا باشن یعنی اگر در سطر وارد شد 1 - 2
در هیچ سطر دیگه‌ای نه میتونه 1 قرار بگیره نه 2 !
یعنی نمیشه 1 - 3 یا 4 - 2 وارد بشه
اون onDelete هم برای رابطه‌ای هست که در mysql بوجود میاریم و میگیم با حذف شدم مثلا رابطه این فیلد هم در این جدول حذف بشه

آفلاین
user-avatar
محمد مهدی
3 ماه پیش

ممنون از وقتی که گذاشتین ، الان گرفتم چی شد.

آفلاین
user-avatar
Soheil
2 ماه پیش

در عمل primary و unique زمانی که می خوایم 2 یا چند فیلد رو در جدول یکتا کنیم هیچ فرقی ندارن . بجز اینکه شما در بعضی از جداول یک primary key دیگه مثل id دارید و دیگه نمی تونید فیلد یا فیلدهای دیگه ای رو primary کنید. یا مثل 2 تا فیلد رو primary کردید و دیگه نمی تونید مثلا 2 تا فیلد دیگه رو هم primary کنید. ولی در unique محدودیتی ندارید و در index شدن رکوردها هم با هم تفاوتی ندارن.
در کل پیشنهاد می شه برای اینکه یک استاندارد برای کارتون داشته باشید ، در این مواقع 2 تا فیلدتون رو unique کنید.

آفلاین
user-avatar

استاد ماژولم یادت نره لطفا . خیلی کاربردیه. مرسی

آفلاین
user-avatar
Mohammadreza Ghomi
4 ماه پیش

شما چرا اومدین یه رابطه بین پرمشن ها و یوز های ایجاد کردین ؟
زمانی که رابطه بین یوزر و رول ها وجود داره کافیه دیگه چون هر رول ، پرمشن خودشو داره.

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

بخاطر اینکه بتونیم به کاربر بدونه دادن یه نقش خاص یه permission بدیم.