سلام و عرض خسته نباشید
من برای پروژه لاراولیم پکیج spatie roles رو اضافه کردم و دو تا پرمیشن ادمین و ممبر ساده رو برای کاربرام تعریف کردم
حالا میخوام بعضی از صفحات رو فقط ادمین بتونه باز کنه بعضی هارو هم فقط ممبر ساده و بعضی از صفحات رو هم هر دوتا بتونن ببینن
ممنون میشم راهنماییم کنید
@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 رو فقط ادمین میتونه ببینه
ممنون میشم که راهنماییم کنی😁😁😁😁
بالا بهتون گفتم که میتونین میدلور مربوطه رو بسازین و داخل فایلweb.php روی روت ها اعمالش کنید
البته اگر با میدلور اشنایی ندارید میتونین در قسمت اموزش رایگان لاراول در بخش مباحث پیشرفته اون رو مشاهده کنین و از اموزش اقای موسوی استفاده کنین
درود..
کافیه به صورت زیر تعریف کنید:
@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
@endworld سلام پایان جهان
ممنون خیلی مفید بود ولی یچیزی!
در قسمت چهارم که به صفحات دیگه لینک میکنه .... من بیشتر از ۲۰ تا صفحه دارم ... حالا اومدیم و من یادم رفت توی یکی از صفحاتم توی لینک دهی تعریف کنم که بیاد رول رو چک کنه اون زمان چی؟؟
اونموقع صفحه ی ادمین رو باز میکنه؟؟ حتی اگه کاربر عادی باشه؟؟
@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']);
});```
@endworld بله متوجه منظورتون هستم
ولی این رو نگا کنید
<li class="mb-3"><a href="{{route('posts.index')}}">نوشته ها</a></li>
میخوام بدونم اگه شرط رو نزارم ینی به صورت بالا بنویسم ..... دیگه هیچ فرقی نمیکنه ؟!! حتی کاربر عادی هم میتونه ورود کنه ؟؟ یا باز گیر میده به ورود؟؟
@ahmadrezabashari
اگر شرط تعریف نکنید, کاربر عادی به صفحات دسترسی پیدا می کنه و خطای دسترسی ۴۰۳ رو نمیده!
فقط اینکه من بهترین پاسخ رو اشتباه انتخاب کردم در واقع باید توضیح بالا رو که اقای @endworld لطف کردن و فرستادن رو انتخاب میکردم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟