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

من میخوام کاربران معمولی که لاگین میکنن نتونن roomهای بقیه افراد رو ببینن و فقط roomای که خودشون ایجاد کردن رو ببینن ولی ادمین بتونه همه ی روم هارو ببینه
این سطح دسترسی رو چطور باید تعریف کنم؟
ممنون میشم راهنماییم کنید
خب این کد چیزی نیست که من گفتم
کد به این صورت میشه
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));
}
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()]);
}شاید پاسخ شما همینجا باشد
@Rp76🌺
من یه قسمت به اسم profile دارم که میخوام وقتی روش کلیک میشه کاربر بتونه roomهای خودشو ببینه
ولی ادمین بتونه همه ی room هارو ببینه 
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();
}
}
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🌺☘️😊خیلیییییییی زیاد بسیار از راهنماییتون ممنونم
این تغییرات رو دادم اجرا شد
@ali.bayat
🌹☘️یه دنیا ممنونم
از گیت استفاده کردم
با راهنمایی آقای پارسیان مشکلم حل شد ولی حتما policyهم امتحان میکنم
قطعا کدم تمیز تر میشه
ممنوووووونم بخاطر راهنماییتون
سلام برای تمیزی بیشتر کدها و جلوگیری از اینکه بیش از حد شلوغ نشه بهتره شرطارو به این صورت بازنویسی کنید و تا حد امکان از این روش استفاده کنید.
$_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;
در ضمن برای هر گفتگویی که مطرح می کنید در صورتی که جواب مناسب رو دریافت کردید حتما بهترین پاسخ رو انتخاب نمایید.
سلام مجدد
خسته نباشید
عذرمیخوام من کدم اجرا نمیشه
یعنی برنامه وارد شرط ifمیشه و داخلش اجرا میشه
چه برای کاربرانی که is_superuserشون 0 با چه 1 فرقی نمیکنه فقط return اول اجرا میشه
@Rp76
میشه ی نگاهی به کدم بندازید لطفا
@Rp76
واقعا ممنونم ازتون
خیییییلیییییی لطف کردید
درست شد🌺🌺🌺🌺🌺🌺🌺