راکت
حل شده

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

12 پاسخ

سلام و عرض خسته نباشید

من برای پروژه لاراولیم پکیج spatie roles رو اضافه کردم و دو تا پرمیشن ادمین و ممبر ساده رو برای کاربرام تعریف کردم

حالا میخوام بعضی از صفحات رو فقط ادمین بتونه باز کنه بعضی هارو هم فقط ممبر ساده و بعضی از صفحات رو هم هر دوتا بتونن ببینن
ممنون میشم راهنماییم کنید

ثبت پرسش جدید

پاسخ‌ها

12
رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

بهترین پاسخ

@ahmadrezabashari
اگر شرط تعریف نکنید, کاربر عادی به صفحات دسترسی پیدا می کنه و خطای دسترسی ۴۰۳ رو نمیده!

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

سلام من این کار رو بدون استفاده از پکیج بهت میگم چون اگه خودت بدونی چه اتفاقی داره میفته میتونی کاملا شخصی سازیش کنی داخل دیتابیست یک فیلده دیگه با نام دسترسی درست میکنی حالا برای هر کدوم از افراد دسترسی هایی رو با عدد هایی بهشون میدی مثلا کاربر ساده صفر ادمین یک و... بعد بیاید و یکسری میدلور درست کنین و در اونها چک کنین دسترسی فرد چند است و اگر اون مجاز بود که هیچ ولی اگر نبود براش ارور۴۰۴ نشون بده همچنین اگر به نوشتن میدلور علاقه نداری میتونی در کانستراکت کلاس کنترلرت دسترسی فرد رو بررسی کنی همین و تمام !

احمدرضا بشری
احمدرضا بشری
@ahmadrezabashari

تخصص: برنامه نویسی وب و سرور

@ajdar9667 سلام و درود امیرعلی

امیرعلی جان این روت و کنترولر من هست که برای صفحه ی خود تعریف کرده ام

روت :

<?php

use App\Http\Controllers\UrlController;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

    Route::get('{url}', [UrlController::class , 'urlpanel']);

کنترولر :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

class UrlController extends Controller
{
    //

    public function urlpanel($url){

        $link_panel = [

            'index',
            'index2',
            'index3',
            'calendar',
            'widgets',
            'chartjs' ,
            'flot' ,
            'inline' ,
            '404' ,
            '500' ,
            'blank' ,
            'invoice-print' ,
            'invoice',
            'lockscreen',
            'login',
            'profile' ,
            'register',
            'advanced',

        ];

        if(in_array($url , $link_panel)){

            return view($link_panel);

        }

    }

}

حالا داخل کنترولرم میخوام تایین کنم که بعضی از صفحاتی رو که داخل ارایه linkpanel تعریف کردم رو فقط ادمین میتونه ببینه
به عنوان مثال صفحات index , index2 , index3 رو فقط ادمین میتونه ببینه
ممنون میشم که راهنماییم کنی😁😁😁😁

شاید پاسخ شما همین‌جا باشد

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

بالا بهتون گفتم که میتونین میدلور مربوطه رو بسازین و داخل فایلweb.php روی روت ها اعمالش کنید

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

البته اگر با میدلور اشنایی ندارید میتونین در قسمت اموزش رایگان لاراول در بخش مباحث پیشرفته اون رو مشاهده کنین و از اموزش اقای موسوی استفاده کنین

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

درود..
کافیه به صورت زیر تعریف کنید:

@if(auth()->user()->role === 'admin')
   <li class="mb-3"><a href="https://roocket.ir/{{route('users.index')}}">کاربران</a></li>
   <li class="mb-3"><a href="https://roocket.ir/{{route('categories.index')}}">دسته بندی</a></li>
@endif

به ترتیب:
۱. فایل به نام IsAdminMiddleware در بخش میدلور ایجاد کنید و کد زیر را وارد کنید:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class IsAdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if(auth()->user()->role !== 'admin'){
            abort(403, 'شما دسترسی لازم برای ورود به این صفحه را ندارید!');
        }
        return $next($request);
    }
}

۲. در بخش kernel.php و قسمت $routeMiddleware کد زیر را فراخوانی کنید:

'admin' => \App\Http\Middleware\IsAdminMiddleware::class,

۳. در مدل User.php کد زیر را وارد کنید:

protected $fillable = [
        'name',
        'email',
        'password',
        'role',
    ];

public function getRoleInPersian()
    {
        if($this->role === 'user') {
            return 'کاربر عادی';
        }
        if ($this->role === 'author') {
            return 'نویسنده';
        }
        if ($this->role === 'admin') {
            return 'مدیر';
        }
    }

۴. کد زیر می توانید در جایی از پوسته نمایش دهید:

<p>نقش کاربر : {{ auth()->guest() ? "guest" : auth()->user()->getRoleInPersian() }}</p>
<td>{{ $user->role }}</td>
@if(auth()->user()->role === 'admin')
   <li class="mb-3"><a href="https://roocket.ir/{{route('users.index')}}">کاربران</a></li>
   <li class="mb-3"><a href="https://roocket.ir/{{route('categories.index')}}">دسته بندی</a></li>
@endif
احمدرضا بشری
احمدرضا بشری
@ahmadrezabashari

تخصص: برنامه نویسی وب و سرور

@endworld سلام پایان جهان
ممنون خیلی مفید بود ولی یچیزی!
در قسمت چهارم که به صفحات دیگه لینک میکنه .... من بیشتر از ۲۰ تا صفحه دارم ... حالا اومدیم و من یادم رفت توی یکی از صفحاتم توی لینک دهی تعریف کنم که بیاد رول رو چک کنه اون زمان چی؟؟
اونموقع صفحه ی ادمین رو باز میکنه؟؟ حتی اگه کاربر عادی باشه؟؟

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@ahmadrezabashari
ببین اساس کار این auth اینکه یه جدول role دارید با مقدارهای admin و user و author هست...
شما وقتی بر روی لینک های با شرط های user یا admin تعریف می کنید و کاربری که اگر دسترسی مثلا ادمین داشته باشه به همه صفحات دسترسی پیدا می کنه و دیگری کاربری که دسترسی عادی یا نویسنده داره مثلا به ۵ تا صفحه دسترسی پیدا می کنه و روی ۲۰ تا صفحه شرط های مدیر و عادی یا نویسنده و غیره تعریف کنی که هر کدوم دسترسی های لازم به اعضا را می دهد.
کد زیر:

@if(auth()->user()->role === 'admin' || auth()->user()->role === 'author')
    <li class="mb-3"><a href="https://roocket.ir/{{route('posts.index')}}">نوشته ها</a></li>
@endif

یادم رفت بگم که روت زیر را تعریف کنید:


Route::middleware(['auth', 'admin'])->prefix('/userarea')->group(function() {
    Route::resource('/users', UserController::class)->except(['show']);
    Route::resource('/categories', CategoryController::class)->except(['show', 'create']);
    Route::resource('/posts', PostController::class)->except(['show']);
});```
احمدرضا بشری
احمدرضا بشری
@ahmadrezabashari

تخصص: برنامه نویسی وب و سرور

@endworld بله متوجه منظورتون هستم

ولی این رو نگا کنید

<li class="mb-3"><a href="https://roocket.ir/{{route('posts.index')}}">نوشته ها</a></li>

میخوام بدونم اگه شرط رو نزارم ینی به صورت بالا بنویسم ..... دیگه هیچ فرقی نمیکنه ؟!! حتی کاربر عادی هم میتونه ورود کنه ؟؟ یا باز گیر میده به ورود؟؟

احمدرضا بشری
احمدرضا بشری
@ahmadrezabashari

تخصص: برنامه نویسی وب و سرور

@endworld ممنون پایان جهان
@ajdar9667 ممنون امیرعلی

بابت وقتی که گذاتشید متشکرم 🥰🥰

احمدرضا بشری
احمدرضا بشری
@ahmadrezabashari

تخصص: برنامه نویسی وب و سرور

فقط اینکه من بهترین پاسخ رو اشتباه انتخاب کردم در واقع باید توضیح بالا رو که اقای @endworld لطف کردن و فرستادن رو انتخاب میکردم

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@ahmadrezabashari
فدای سرت...
موفق باشید ✌️

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

ورود یا ثبت‌نام