سلام
روزتون بخیر
عذرمیخوام یه سوالی داشتم
من میخوام کاربران معمولی که لاگین میکنن نتونن 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));
}
سلام وقتتون بخیر!
سطح دسترسی تعریف کردی؟؟
با کد پایین میتونی هر room رو محدود کنی به هر کاربر
$rooms=Room::where("user_id",Auth::id())->get();
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()]);
}
خب پس اینطوری میشه.
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 هم نیست با کد بالا حل میشه
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();
}
}
مشکل چی بود که میگید کار نکرد؟
اگر امکانش رو دارید واتساپ پیام بدید ببینم مشکلتون دیقیقا چی هست! ( anydesk )
کد نباید مشکل داشته باشه با کاربری که supper نیست هم تست کردید؟
میتونی policy تعریف کنی
هر کاربر وارد یک view policy میشه و به این ترتیب میتونه فقط اتاق های خودش رو ببینه
حالا در کنار این میتونی از کلاس Gate لاراول هم استفاده کنی و اجازه دیدن تمام اتاق ها رو به ادمین بدی
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;
در ضمن برای هر گفتگویی که مطرح می کنید در صورتی که جواب مناسب رو دریافت کردید حتما بهترین پاسخ رو انتخاب نمایید.
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()
]);
}
خیلیی ممنونم ازتون
خب این کد چیزی نیست که من گفتم
کد به این صورت میشه
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));
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟