solution for route group AND gate policy

پرسیده شده
فعالیت 1042 روز پیش
دیده شده 510 بار
0

سلام خسته نباشید 
دوتا سوال داشتم 
اول اینکه راهکارتون میخواستم در مورد ایجاد یک گروه از مسیر ها رو بدونم 
مثلا گروه پنل ادمین یا گروه پروفایل
دوم هم برای ایجاد سطوح دستری بهترین راهکار چی هست
متشکرم,’’

فایل پیوست

Mehrzad Tajkarimi
Mehrzad Tajkarimi

14 خرداد 00

1
حذف شده

سلام و احترام

برای داشتن گروه هم نمیدونم پیاده سازیش کردید یا ن ولی به این شکل باید باشه

Route::middleware(['first', 'second'])->group(function () {

    Route::get('/', function () {

        // Uses first & second middleware...

    });

 

    Route::get('/user/profile', function () {

        // Uses first & second middleware...

    });

});

متد group رو از کلاس Route صدا میزنید و داخلش یک callback function دریافت میکنه، بعد میتونید روت های خودتو داخلش تعریف کنید، حالا اگه راهنمایی هم درباره پیاده سازیش هم خواستید بگید تا کمکتون کنم.

 

برای داشتن سطح دسترسی باید یک جدول داشته باشید به اسم Role که داخل این جدول نقش های مختلفی میشینه(مثلا نویسنده، مدیر و..)، یه جدول دیگه باید داشته باشید به اسم Permissions که دسترسی ها مختلف داخلش میشینه (مثلا add-post، delete-post و از این جور دسترسی ها)

حالا شما برای اینکه بخواید این دسترسی ها را به نقش ها ربط بدید باید یه جدول داشته باشید با رابطه چند به چند به اسم role_permissions که فیلدهای این جدول permission_id و role_id هستش که بشه برای هر Role چندین دسترسی مشخص کرد

 

حالا برای اینکه مشخص کنید که یک کاربر نقش داشته باشه میتونید یک جدول دیگه بسازید به اسم user_roles که داخل این یک user_id و role_id میخوره که هر کاربر میتونه role ها مختلفی داشته باشه

فایل پیوست

امیر صالحی

توسط

امیر صالحی

14 خرداد 00

حذف شده
سلام خیلی ممنون اگه امکان داره در خصوص پیاده سازی middleware و group و همچنین در مورد Logic جدا سازی روت ها در فایلهای مثلا frontend و backend بفرمایید به چه صورت اقدام میشه کرد ممنون میشم. به این جهت که در آینده که تعداد روتها زیاد میشود روتهای پنل ادمین رو از front جدا کنم از ابتدا..
Mehrzad Tajkarimi

26 خرداد 00

0
حذف شده

سلام و احترام

اگه دارید از api استفاده میکنید برای فرانت پروژه میتویند یه فایل به اسم api بسازید و روت های api رو داخل همون قرار بدید اما اگه دارید به صورت view لود میکنید هم میتونید از همون فایل web.php استفاده کنید و هم میتونید یه فایل دیگه بسازید به اسم web-front.php و بیایید این روت های فرانتتون رو داخل اون هندلش کنید. پیاده سازی این مورد هم سادست شما فقط فایل رو جدا میکنید و از همون کلاس Route استفاده میکنید که داخلش همه روت ها هستش.

 

درباره middleware دقیقا چه موردی رو توضیح بدم؟

 

برای درست کردن group هم یه فرصت به بنده بدید تا یه راه حل مناسب پیدا کنم و ارائه بدم

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

29 خرداد 00

حذف شده
سلام سوالم رو در پاسخ زیر نوشتم... ممنون میشم بررسی بفرمایید
Mehrzad Tajkarimi

30 خرداد 00

0
حذف شده

سلام خسته نباشید 

ببینید در خصوص  route پیاده سازیش به صورت مجزا 

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


private function dispatch($route)
    {
        $action = $route['action'];
        if (is_null($action) || empty($action)) {
            return;
        }
        if (is_callable($action)) {
            $action();
        }
        if (is_string($action)) {
            $action = explode('@', $action);
        }
        if (is_array($action)) {

            $uri_separator = explode('/',$route['uri']);
            $routing = $uri_separator[1] =='admin' ? 'backend\\' : 'frontend\\';
            $class_name  = self::BASE_CONTROLLER .$routing. $action[0];
            $method_name = $action[1];
            if (!class_exists($class_name)) {
                throw new \Exception("class $class_name Not Exists");
            }
            if (!method_exists($class_name, $method_name)) {
                throw new \Exception("method  $method_name not exist in class $class_name");
            }
            $controller = new $class_name();
            return $controller->{$method_name}();
        }
    }

درخصوص group
در کلاس Route

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

 


    public static function group($callback)
    {
        if (is_callable($callback)) {
            $callback();
        }
        return;
    }

    

در خصوص middleware 
 در واقع مثلا لاراول میخوام به این صورت انجام بشود؟


Route::group(function () {
    Route::get('/admin', 'HomeController@index');
    Route::get('/admin/users', 'UserController@index')->middleware('auth.admin');
})->middleware('auth');

 

فایل پیوست

Mehrzad Tajkarimi

توسط

Mehrzad Tajkarimi

30 خرداد 00

0
حذف شده

سلام و احترام

برای روت هاتون هم خوبه مشکلی نیست، میتونید حالا بعدا برای مثال از فایل جدا هم استفاده کنید، ولی زیاد مشکلی نیست میتونید توی یه فایل هم روت های فرانت و بک اندتون رو هم داشته باشید

 

برای به اجرا در آوردن callable ها میتونید از تابع call_user_func استفاده کنید

https://www.php.net/manual/en/function.call-user-func.php

 

برای اینکه بتونید middlware هارتون رو به شکلی که نوشتید پاس بدید باید داخل متد group آجکت اون کلاس رو $this رو return کنید و داخل اون کلاس باید متدی به اسم middlware داشته باشید که بتونید وقتی آبجکت بر میگرده از متد استفاده کنید

فایل پیوست

امیر صالحی

توسط

امیر صالحی

30 خرداد 00

0
حذف شده

یکی از دانشجو ها سون لرن یک پکیج روتینک مثل لاراول نوشته میتونید یه سری بهش بزنید و با نحوه پیاده سازی آشنا بشید

https://github.com/rabpack/routing

فایل پیوست

امیر صالحی

توسط

امیر صالحی

30 خرداد 00