اذهب إلى المحتوى

السؤال

نشر

كيف يمكنني إضافة مستخدم وأجعله مديراً ثم يضيف (يسجل) المدير المستخدمين لقاعدة البيانات وبعدها كل مستخدم يستطيع تسجيل الدخول لصفحته بالعملومات التي انشئها المدير.

بإختصار اي لا احعل عملية التسجيل عند المستخدم بل عند الإدارة.

بإستخدام laravel

Recommended Posts

  • 1
نشر

بداية نحتاج الى الغاء عملية التسجيل والرابط الموجه لصفحة التسجيل, اذا كنت تستخدم حزمة laravel/ui يمكنك فعل ذلك من خلال الامر التالي في ملف web.php

Auth::routes(['register' => false]);

أما اذا كنت تستخدم jetstream يمكنك الغاء عملية التسجيل من خلال الذهاب الى ملف fortify.php الموجود ضمن المسار الآتي config/fortify.php ثم تقوم بعمل تعليق لهذا السطر

Features::registration(

بعد ذلك يمكننا انشاء حساب في قاعدة البيانات بشكل يدوي ونجعله مديرا اما باستخدام المساعد Tinker الذي يأتي بشكل تلقائي مع لارافيل أو يمكننا ذلك من خلال قاعدة البيانات بشكل يدوي, والآن يحتاج المدير الى لوحة تحكم يمكنه من خلالها التحكم في كافة أمور الموقع مثل اضافة وتعديل وحذف المستخدمين وغيرها من الأمور حيث يجب علينا تصميمها وبرمجتها , الآن اذا اراد مستخدم جديد التسجيل في الموقع يجب عليه أن يتواصل مع ادارة الموقع لكي توفر له حساب يتسطيع الدخول من خلاله, بعد ان يتم التواصل وانشاء الحساب سوف ترسل له ادارة الموقع معلومات الحساب ويستطيع الدخول من خلالها

  • 1
نشر

يمكنك إنشاء حقل باسم isAdmin  و قيمته تكون أما 0 أي عضو , 1 أدمن , مدير, في جدول users 

$table->integer('isAdmin')->default(0);

ومن ثم إنشاء Seeder لإضافة يوزر افتراضي للموقع عن طريق تنفيذ الأمر التالي 

php artisan make:seeder UserSeeder

ثم تقوم بفتح هذا الملف من خلال المسار التالي 

database\seeds

ومن ثم تقوم بإضافة بيانات اختبارية أو اليوزر الذي تود إنشائه عن تثبيت المشروع الخاص بك داخل ملف UserSeeder 

$user = \App\User::create([
  'name' => 'user',
  'email' => 'user@user.com',
  'password' => Hash::make('123123123'),
  'phone' => '',
  'isAdmin' => 1,
]);

وتعطيه قيمة حقل isAdmin = 1 , ومن ثم تقوم بإنشاء ملف Controller لإضافة مستخدمين عن طريق الأمر التالي 

php artisan make:controller Admin\UsersController --resource

ومن ثم بداخل هذا الملف نقوم بكتابة أكواد إضافة مستخدمين و تعديل مستخدم و حذف مستخدم فيمكن إضافة مستحدمين عن طريق الكود التالي 

	/**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $countries = Country::all();
        return view('admin.users.create', compact('countries'));
    }

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

        $users = new User();
        $users->name = $request->name;
        $users->email = $request->email;
        $users->phone = $request->phone;
        $users->password = \Hash::make($request->password);

        if($request->hasFile('image')){
            $img = time() . '.' . $request->file('image')->getClientOriginalExtension();
            $users->image = $img;
            $request->image->move(public_path('assets/users_img'), $img);
        }
        $users->save();

        \Session::flash('alert-success', trans('lang.success_add'));
        return redirect()->route('users.index');
    }

وكامل الملف يكون 

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Hash;
use Str;

class UsersController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {

    }
    

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(UsersDataTable $users)
    {
        return view('admin.users.index');
    }

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

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

        $users = new User();
        $users->name = $request->name;
        $users->email = $request->email;
        $users->phone = $request->phone;
        $users->password = \Hash::make($request->password);

        if($request->hasFile('image')){
            $img = time() . '.' . $request->file('image')->getClientOriginalExtension();
            $users->image = $img;
            $request->image->move(public_path('assets/users_img'), $img);
        }
        $users->save();
        \Session::flash('alert-success', trans('lang.success_add'));
        return redirect()->route('users.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show(Request $request, $id)
    {
        $user = User::find($id);

        if(! $request->ajax()){
            return view('admin.users.show', compact('user'));
        }else{
            return view('admin.users.modal.show', compact('user'));
        }
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $user = User::find($id);
        $users = User::all();
        return view('admin.users.edit', compact('user', 'users'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,' . $id],
        ]);

        $users = User::find($id);
        $users->name = $request->name;
        $users->email = $request->email;
        $users->phone = $request->phone;

        if($request->hasFile('image')){
            $img = time() . '.' . $request->file('image')->getClientOriginalExtension();
            $users->image = $img;
            $request->image->move(public_path('assets/users_img'), $img);
        }
        $users->save();

        \Session::flash('alert-success', trans('lang.success_update'));
        return redirect()->route('users.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $user = User::find($id)->delete();
        \Session::flash('alert-success', trans('lang.success_delete'));
        return redirect()->route('users.index');
    }
}

ثم تقوم بإنشاء middleware للتحكم بالأعضاء للسماح لهم بالدخول إلى الملف أو لا عن طريق الأمر التالي 

php artisan make:middleware IsAdmin

ثم نتوجه إلى المسار التالي لفتح الملف IsAdmin.php 

app\Http\Middleware

ونقوم بوضع شرط معين إذا كان العضو الذي يريد الدخول إلى الصفحة قيمة الحقل isAdmin تساوي 1 يمكنه الدخول إلى هذه الصفحة 

public function handle($request, Closure $next)
    {
        if (auth()->guard('web')->user()->isAdmin == 1) {
            return $next($request);
        } else {
            return redirect('/404');
        }
        //return $next($request);
    }

فيكون كامل الملف 

<?php

namespace App\Http\Middleware;

use Closure;

class IsAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (auth()->guard('web')->user()->isAdmin == 1) {
            return $next($request);
        } else {
            return redirect('/404');
        }
        //return $next($request);
    }
}

ثم نقوم بإضافة هذا Middleware الذي قمنا بإنشائه إلى ملف Kernel.php داخل المسار التالي 

app\Http

إلى مصفوفة 

$routeMiddleware = [];

بهذه الطريقة 

'admin' => \App\Http\Middleware\IsAdmin::class,

ثم نقوم بفتح ملف web.php و إضافة المسار إلى هذا الملف ويكون المسار 

Route::group(['middleware' => ['auth:admins'], 'prefix' => 'admin'], function(){
	Route::resource('users', 'Admin\UsersController');  
});

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...