مشکات
3 سال پیش توسط مشکات مطرح شد
21 پاسخ

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

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

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


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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

    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));
    }

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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

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

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

$rooms=Room::where("user_id",Auth::id())->get();

مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

    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 3 سال پیش مطرح شد
0

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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

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


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

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

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 3 سال پیش مطرح شد
0
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();
    }

}

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

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

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

واتساپ


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
1

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

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


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0
   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 3 سال پیش مطرح شد
1

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش آپدیت شد
-1

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

   $_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 3 سال پیش مطرح شد
0

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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

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


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0
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 3 سال پیش آپدیت شد
0

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


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش آپدیت شد
0

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


مشکات
تخصص : کاراموز
@meshkat315 3 سال پیش مطرح شد
0

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

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

    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));
    }

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

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