راکت
حل شده

پنل کاربری در لاراول

21 پاسخ

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

من میخوام کاربران معمولی که لاگین میکنن نتونن roomهای بقیه افراد رو ببینن و فقط roomای که خودشون ایجاد کردن رو ببینن ولی ادمین بتونه همه ی روم هارو ببینه
این سطح دسترسی رو چطور باید تعریف کنم؟
ممنون میشم راهنماییم کنید

ثبت پرسش جدید

پاسخ‌ها

21
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

بهترین پاسخ

خب این کد چیزی نیست که من گفتم
کد به این صورت میشه

    public function index()
    {
        $rooms = Room::query();

        if (Auth::user()->is_superuser==0)
            return view('admin.rooms.index', ['rooms' => Room::where('user_id', Auth::id())->get()]);

        return view('admin.rooms.index', ['rooms' => \App\Models\Room::all()]);
    }

اما بهتره این کارو رو کنید

public function index()
    {
        $rooms=Room::where(function ($query){
            if(Auth::user()->is_superuser==1)
                return $query;

            return $query->where("user_id",Auth::id());
        })->get(); // or paginate();

        return view('admin.rooms.index',compact(rooms));
    }
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

سلام وقتتون بخیر!

سطح دسترسی تعریف کردی؟؟

با کد پایین میتونی هر room رو محدود کنی به هر کاربر

$rooms=Room::where("user_id",Auth::id())->get();
مشکات
مشکات
@meshkat315

تخصص: کاراموز


    public function index()
    {
        return view('admin.rooms.index' , [
            'rooms'=>\App\Models\Room::all()
        ]);
    }

مثلا در این قسمت چطوری میتونم بگم اگر کاربر ادمین بود ویوی index نشون داده بشه با متد all
ولی اگر کاربر معمولی بود ویوی indexرو ببینه ولی با عملیات زیر اجرا بشه

public function UsersRoom(Room $room)
    {
        return view('admin.rooms.index', ['rooms'=>\App\Models\Room::where('user_id',auth()->user()->id)->get()]);
    }

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

مشکات
مشکات
@meshkat315

تخصص: کاراموز

@Rp76🌺
من یه قسمت به اسم profile دارم که میخوام وقتی روش کلیک میشه کاربر بتونه roomهای خودشو ببینه
ولی ادمین بتونه همه ی room هارو ببینه توضیح تصویر رو وارد کنید

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

متوجه هستم میخوای چیکار کنی

چطور میشه الان فهمید کاربر مدیر هست یا نه؟

مشکات
مشکات
@meshkat315

تخصص: کاراموز

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

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

خب پس اینطوری میشه.

public function index()
    {
        $rooms=\App\Models\Room::where(function($query){
                if(Auth::user()->is_superuser==1)
                        return $query;
                return $query->where("user_id",Auth::id());
        })->get();
        return view('admin.rooms.index' ,compact("rooms"));
    }

نیاز به ۲ تا route هم نیست با کد بالا حل میشه

مشکات
مشکات
@meshkat315

تخصص: کاراموز

public function index()
    {

        $rooms=\App\Models\Room::where(function($query){
            if(Auth::user()->is_superuser==1)
                return $query;
            return $query->where("user_id",Auth::id());
        })->get();
        return view('admin.rooms.index' , [
            'rooms'=>\App\Models\Room::all()
        ]);
    }

این کد رو نوشتم ولی اجرا نشد و بازم همه ی اتاق ها نشون داده شد
یه لحظه UserControllerمنو ببینید

<?php

namespace App\Http\Controllers\Admin\User;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;

use App\Http\Requests\RoomRequest;
use App\Http\Requests\UserRequest;
use App\Models\Room;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rule;
use phpDocumentor\Reflection\Types\Null_;

class UserController extends Controller
{

    public function __construct()
    {
        $this->middleware('can:show-users')->only(['index']);
        $this->middleware('can:create-user')->only(['create' , 'store']);
        $this->middleware('can:edit-user')->only(['edit' , 'update']);
        $this->middleware('can:delete-user')->only(['destroy']);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    //see all users

    public function index(User $user)
    {

        $users=User::query();

        if ($keyword=request('search')){
            $users->where('email' , 'LIKE' , "%{$keyword}%")->orwhere('deleted_at' , 'LIKE' ,$keyword);
        }

        if (\request('admin')){

            $this->authorize('show-staff-users');
            $users->where('is_superuser' , 1)->orWhere('is_staff' , 1);
        }

        if (Gate::allows('show-staff-users')){
            if (\request('admin')){

                $users->where('is_superuser' , 1)->orWhere('is_staff' , 1);
            }
        }
        else{
            $users->where('is_superuser' , 0)->orWhere('is_staff' , 0);

        }

        $users = $users->withTrashed()->latest()->simplepaginate(7);

        //Restoring a Soft Deleted record
//        User::withTrashed()->where('id', 4)->restore();

        return view('admin.users.index',
//                ['users'=>\App\Models\User::all()]
            compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.users.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Routing\Redirector|string
     */
    public function store(Request $request)
    {
       $data = $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],

        ]);
        if (isset($_POST['is_disable'])) {
            $_POST['is_disable'] = 1;

        } else
            $_POST['is_disable'] = 0;

        if (isset($_POST['is_superuser'])) {
            $_POST['is_superuser'] = 1;

        } else
            $_POST['is_superuser'] = 0;

        if (isset($_POST['is_staff'])) {
            $_POST['is_staff'] = 1;

        } else
            $_POST['is_staff'] = 0;

     User::create([
            'name'=>$data['name'],
            'email'=>$data['email'],
            'password'=>Hash::make(($data['password'])),

            'is_disable'=>$_POST['is_disable'],
            'is_superuser'=>$_POST['is_superuser'],
            'is_staff'=>$_POST['is_staff'],
        ]);
        alert()->success('کاربر با موفقیت ایجاد شد.' , 'Message')->persistent('Ok');
        return redirect('/admin/users');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
     */
    public function edit(User $user)
    {
//       1. if (Gate::allows('edit-user' , $user)){
//            return view('admin.users.edit', compact('user'));
//        }
//        abort(403);
//       2. $this->authorize('edit-user' , $user);

//            $this->authorize('edit' , $user);
            return view('admin.users.edit', compact('user'));

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Routing\Redirector
     */
    public function update(Request $request ,User $user)
    {

//        $validate_data=$request->validated();

//        $room=\App\Models\Room::findOrFail($id);
//            return $room;

        $data = $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);

//        if (! is_null($request->password)){
//            $request->validate([
//                'password' => ['required', 'string', 'min:8', 'confirmed'],
//            ]);
//            $data['password'] = $request->password;
//        }

            if (isset($_POST['is_disable'])) {
                $_POST['is_disable'] = 1;

            } else
                $_POST['is_disable'] = 0;

            if (isset($_POST['is_superuser'])) {
                $_POST['is_superuser'] = 1;

            } else
                $_POST['is_superuser'] = 0;

            if (isset($_POST['is_staff'])) {
                $_POST['is_staff'] = 1;

            } else
                $_POST['is_staff'] = 0;

//        dd( $_POST['is_disable']);

        $user->update([
            'name'=>$data['name'],
            'email'=>$data['email'],
            'password'=>Hash::make(($data['password'])),
            'is_disable' => $_POST['is_disable'],
            'is_superuser' => $_POST['is_superuser'],
            'is_staff' => $_POST['is_staff'],
        ]);
        alert()->success('مطلب مورد نظر شما با موفقیت ویرایش شد.' , 'Message')->persistent('Ok');
        return redirect('/admin/users');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        $user->delete();
        alert()->success('عملیات با موفقیت انجام شد.' , 'Message')->persistent('Ok');
        return back();
    }

//    public function show (Request $request ,User $user)
//    {
//        $users = User::simplepaginate(3);
//        User::withTrashed();
//            $user->get();
//        return view('admin.users.DeletedUser',
////                ['users'=>\App\Models\User::all()]
//            compact('users'));
//    }

//Restoring a Soft Deleted record
    public function restore($id)
    {
        User::withTrashed()->find($id)->restore();
        alert()->success('عملیات با موفقیت انجام شد.' , 'Message')->persistent('Ok');
        return back();
    }

}
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

مشکل چی بود که میگید کار نکرد؟
اگر امکانش رو دارید واتساپ پیام بدید ببینم مشکلتون دیقیقا چی هست! ( anydesk )

کد نباید مشکل داشته باشه با کاربری که supper نیست هم تست کردید؟

واتساپ

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

میتونی policy تعریف کنی
هر کاربر وارد یک view policy میشه و به این ترتیب میتونه فقط اتاق های خودش رو ببینه

حالا در کنار این میتونی از کلاس Gate لاراول هم استفاده کنی و اجازه دیدن تمام اتاق ها رو به ادمین بدی

مشکات
مشکات
@meshkat315

تخصص: کاراموز

   public function index()
    {

        $rooms=Room::query();
            if(Auth::user()->where('is_superuser' , 0))
            return view('admin.rooms.index',['rooms'=>Room::where('user_id',Auth::id())->get()]);
        return view('admin.rooms.index' , [
            'rooms'=>\App\Models\Room::all()
        ]);
    }

@Rp76🌺☘️😊خیلیییییییی زیاد بسیار از راهنماییتون ممنونم
این تغییرات رو دادم اجرا شد

مشکات
مشکات
@meshkat315

تخصص: کاراموز

@ali.bayat
🌹☘️یه دنیا ممنونم
از گیت استفاده کردم
با راهنمایی آقای پارسیان مشکلم حل شد ولی حتما policyهم امتحان میکنم
قطعا کدم تمیز تر میشه
ممنوووووونم بخاطر راهنماییتون

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

بسلامتی، خیلی خوشحال شدم
گفتم که کد ها درست هست

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام برای تمیزی بیشتر کدها و جلوگیری از اینکه بیش از حد شلوغ نشه بهتره شرطارو به این صورت بازنویسی کنید و تا حد امکان از این روش استفاده کنید.

   $_POST['is_disable'] = isset($_POST['is_disable']) ? 1 : 0;
   $_POST['is_superuser'] = isset($_POST['is_superuser']) ? 1 : 0;
   $_POST['is_staff'] = isset($_POST['is_staff']) ? 1 : 0;

در ضمن برای هر گفتگویی که مطرح می کنید در صورتی که جواب مناسب رو دریافت کردید حتما بهترین پاسخ رو انتخاب نمایید.

مشکات
مشکات
@meshkat315

تخصص: کاراموز

سلام مجدد
خسته نباشید
عذرمیخوام من کدم اجرا نمیشه
یعنی برنامه وارد شرط ifمیشه و داخلش اجرا میشه
چه برای کاربرانی که is_superuserشون 0 با چه 1 فرقی نمیکنه فقط return اول اجرا میشه
@Rp76
میشه ی نگاهی به کدم بندازید لطفا

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

سلام وقتتون بخیر!

چرا کنه فقط من کد رو از کجا ببینم؟

مشکات
مشکات
@meshkat315

تخصص: کاراموز

public function index()
    {

        $rooms=Room::query();
            if(Auth::user()->where('is_superuser' , 0))
            return view('admin.rooms.index',['rooms'=>Room::where('user_id',Auth::id())->get()]);
        return view('admin.rooms.index' , [
            'rooms'=>\App\Models\Room::all()
        ]);
    }

خیلیی ممنونم ازتون

مشکات
مشکات
@meshkat315

تخصص: کاراموز

ببینید برای کاربری که superuserهست فقط roomهای خودشو نشون میده

مشکات
مشکات
@meshkat315

تخصص: کاراموز

برای کاربری ک superuserنیست هم roomهای خودشو نشون میده

مشکات
مشکات
@meshkat315

تخصص: کاراموز

با توجه ب شرطی که توی کد گذاشتم برای superuserباید همه ی roomها نمایش داده بشه😥

مشکات
مشکات
@meshkat315

تخصص: کاراموز

@Rp76
واقعا ممنونم ازتون
خیییییلیییییی لطف کردید
درست شد🌺🌺🌺🌺🌺🌺🌺

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

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