سلام خسته نباشید دوتا سوال داشتم اول اینکه راهکارتون میخواستم در مورد ایجاد یک گروه از مسیرها رو بدونم مثلا گروه پنل ادمین یا گروه پروفایل دوم هم برای ایجاد سطوح دستری بهترین راهکار چی هست متشکرم,’’
سلام و احترام
برای داشتن گروه هم نمیدونم پیاده سازیش کردید یا ن ولی به این شکل باید باشه
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ها مختلفی داشته باشه
بهترین پاسخ
امیر صالحی۱۴ خرداد ۱۴۰۰، ۱۷:۴۰
سلام و احترام
اگه دارید از api استفاده میکنید برای فرانت پروژه میتویند یه فایل به اسم api بسازید و روتهای api رو داخل همون قرار بدید اما اگه دارید به صورت view لود میکنید هم میتونید از همون فایل web.php استفاده کنید و هم میتونید یه فایل دیگه بسازید به اسم web-front.php و بیایید این روتهای فرانتتون رو داخل اون هندلش کنید. پیاده سازی این مورد هم سادست شما فقط فایل رو جدا میکنید و از همون کلاس Route استفاده میکنید که داخلش همه روتها هستش.
درباره middleware دقیقا چه موردی رو توضیح بدم؟
برای درست کردن group هم یه فرصت به بنده بدید تا یه راه حل مناسب پیدا کنم و ارائه بدم
امیر صالحی۲۹ خرداد ۱۴۰۰، ۱۷:۵۳
سلام خسته نباشید
ببینید در خصوص 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 در واقع مثلا لاراول میخوام به این صورت انجام بشود؟
برای روت هاتون هم خوبه مشکلی نیست، میتونید حالا بعدا برای مثال از فایل جدا هم استفاده کنید، ولی زیاد مشکلی نیست میتونید توی یه فایل هم روتهای فرانت و بک اندتون رو هم داشته باشید
برای به اجرا در آوردن callableها میتونید از تابع call_user_func استفاده کنید
برای اینکه بتونید middlware هارتون رو به شکلی که نوشتید پاس بدید باید داخل متد group آجکت اون کلاس رو $this رو return کنید و داخل اون کلاس باید متدی به اسم middlware داشته باشید که بتونید وقتی آبجکت بر میگرده از متد استفاده کنید
امیر صالحی۳۰ خرداد ۱۴۰۰، ۱۹:۲۲
یکی از دانشجوها سون لرن یک پکیج روتینک مثل لاراول نوشته میتونید یه سری بهش بزنید و با نحوه پیاده سازی آشنا بشید