احمدرضا بشری
3 سال پیش توسط احمدرضا بشری مطرح شد
12 پاسخ

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

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

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

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


ثبت پرسش جدید
رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

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


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

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


احمدرضا بشری
تخصص : برنامه نویسی وب و سرور
@ahmadrezabashari 3 سال پیش آپدیت شد
0

@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 رو فقط ادمین میتونه ببینه
ممنون میشم که راهنماییم کنی😁😁😁😁


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

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


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش آپدیت شد
0

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

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

احمدرضا بشری
تخصص : برنامه نویسی وب و سرور
@ahmadrezabashari 3 سال پیش مطرح شد
0

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش آپدیت شد
0

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

@if(auth()->user()->role === 'admin' || auth()->user()->role === 'author')
    <li class="mb-3"><a href="{{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 3 سال پیش آپدیت شد
0

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

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

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

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

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


احمدرضا بشری
تخصص : برنامه نویسی وب و سرور
@ahmadrezabashari 3 سال پیش مطرح شد
1

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

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


احمدرضا بشری
تخصص : برنامه نویسی وب و سرور
@ahmadrezabashari 3 سال پیش مطرح شد
1

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

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


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

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