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

كيف يمكن التعامل مع الصلاحيات في تطبيق لارافيل؟

Hafsa Aly

السؤال

لدي مشروع لادارة المعلمين يتم ادارته من خلال (المدرسة-الادارة)

اريد عمل صلاحيةلكل مدرسة ان ترى المعلمين الخاصين بها فقط من الdb وايضا كل ادارة ترى المعلمين الموجودين فقط بادارتها ولاترى باقي المعلمين من الdb

كيف افعل ذلك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك استخدام البرمجيّات الوسيطة (Middleware) في Laravel

فلنفترض أن العنوان الخاص بإظهار المعلمين كالتالى

Route::get('/teacher/{id}')

هنا يمكننا إنشاء و تمرير ال Middleware كالتالى

Route::get('/teacher/{id}')->middleware('employee')

هنا قمنا بتمرير Middleware يسمى employee وقبل تنفيذ الكود الخاص بهذا العنوان فإن ال Middleware سينفذ أولا.

ولإنشاء ال Middleware نستخدم الامر التالى 

php artisan make:middleware CheckEmployee

وسوف يقوم بإنشاء ملف ال Middleware التالى في هذا المجلد app/Http/Middleware

<?php

namespace App\Http\Middleware;

use Closure;

class CheckEmployee
{
    public function handle($request, Closure $next)
    {
      	$user = User::find($request->route('id'));
      	if(!$user) return abort(404);
        if ($user->shool_id !== Auth::user()->id) {
            return abort(401);
        }

        return $next($request);
    }
}

هنا قمنا بإفتراض ان جدول المعلم لديه عمود  school_id خاص بالمدرسة  التابع لها  وقمنا بالتحقق إذا كان هو نفس ال id الخاص بالمدرسة التى تقوم بتسجيل الدخول حاليا وإن لم يكن نفس ال id فسوف نقوم بتحويله الى صفحة غير مخول بالدخول إلي هذه الصفحة . ونفس الامر أيضا مع الإدارة.

وهذا المقال يوضح طريقة إنشاء وإستخدام ال  Middleware يمكنك الإطلاع عليه

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بجانب ما اقترح المدرب عاطف، يمكنك الاستعانة بحزمة laravel-permission المقدمة من مجموعة spatie للتعامل مع الادوار والاذونات في تطبيقات لارافيل. 

تتعامل هاته الحزمة مع الصلاحيات وفق المنطق التالي:

  • يمتلك المستخدم [دورا] ما.
  • هذا الدور يمتلك مجموعة معينة من [الأذونات] التي يتم اسنادها له.
  • يمكن اسناد دور ما لمستخدم ما.
  • يمكن اسناد اذونة او صلاحية ما لدور ما.

وتستخدم في مضمونها مفهوم البوابات والسياسات Gates & Policies. ويتم تعريف هاته الاذونات والادوار في ملفات مستقلة يمكن التعامل معها بشكل مستقل تماما.

حيث يتم التحقق كل مرة يتم فيها استهداف حدث معين من التحقق مما اذا كان المستخدم الذي يقوم بالطلب يمتلك دورا من بين صلاحياته الوصول الى هذا المورد.

مثال:

  • يمتلك المستخدم "احمد" الدور "مدير مدرسة". هذا الدور يمتلك صلاحيات قراءة. محو، وتعديل الارشيف.
  • عندما يحاول احمد الوصول للارشيف تحدث كامل العملية ويتم التحقق من ترخيصه.

اعرف أكثر عن الترخيص (Authorization) في Laravel

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 53 دقائق مضت قال Adnane Kadri:

بجانب ما اقترح المدرب عاطف، يمكنك الاستعانة بحزمة laravel-permission المقدمة من مجموعة spatie للتعامل مع الادوار والاذونات في تطبيقات لارافيل. 

تتعامل هاته الحزمة مع الصلاحيات وفق المنطق التالي:

  • يمتلك المستخدم [دورا] ما.
  • هذا الدور يمتلك مجموعة معينة من [الأذونات] التي يتم اسنادها له.
  • يمكن اسناد دور ما لمستخدم ما.
  • يمكن اسناد اذونة او صلاحية ما لدور ما.

وتستخدم في مضمونها مفهوم البوابات والسياسات Gates & Policies. ويتم تعريف هاته الاذونات والادوار في ملفات مستقلة يمكن التعامل معها بشكل مستقل تماما.

حيث يتم التحقق كل مرة يتم فيها استهداف حدث معين من التحقق مما اذا كان المستخدم الذي يقوم بالطلب يمتلك دورا من بين صلاحياته الوصول الى هذا المورد.

مثال:

  • يمتلك المستخدم "احمد" الدور "مدير مدرسة". هذا الدور يمتلك صلاحيات قراءة. محو، وتعديل الارشيف.
  • عندما يحاول احمد الوصول للارشيف تحدث كامل العملية ويتم التحقق من ترخيصه.

اعرف أكثر عن الترخيص (Authorization) في Laravel

نعم شكرا لك

ولكن انا اقصد ان اقوم بعمل حجب في قاعدة البيانات اي ان كل مدير مدرسة لايستطيع ان يري الا بيانات معلمين مدرسته فقط ولا يعرض امامه بيانات باقي معلمين المدارس الاخرى

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال Hafsa Aly:

نعم شكرا لك

ولكن انا اقصد ان اقوم بعمل حجب في قاعدة البيانات اي ان كل مدير مدرسة لايستطيع ان يري الا بيانات معلمين مدرسته فقط ولا يعرض امامه بيانات باقي معلمين المدارس الاخرى

يمكن انشاء دور مدير مدرسة. حيث ان هذا الدور يمتلك صلاحية رؤية معلمي مدرسته فقط. ما المانع في ذلك؟

وقد لا يكون هنالك حاجة اساسا من موضوع الصلاحيات، لما لا تقومين فقط بتنفيذ استعلام يقوم بجلب بيانات المعلمين الخاصين بمدرسة المدير؟

$doctor = Doctor::find($target_doctor_id);

$doctor_school = $doctot->school_id;

$teachers = Teacher::where('school_id' ,$doctor_school)->get();

او يمكنك تنظيم العملية اكثر عن طريق علاقات Eloquent. حيث:

  • كل مدرسة تمتلك العديد من المعلمين. => علاقة one to many
  • كل مدرسة تمتلك مديرا واحدا. => علاقة one to one

يكون ناتج الاستعلام مشابها لـ:

$teachers_of_a_school = Doctor::find($target_doctor_id)
->school()
->teachers();

مقدمة إلى رابط الكائنات بالعلاقات Eloquent - موسوعة حسوب

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال Adnane Kadri:

يمكن انشاء دور مدير مدرسة. حيث ان هذا الدور يمتلك صلاحية رؤية معلمي مدرسته فقط. ما المانع في ذلك؟

وقد لا يكون هنالك حاجة اساسا من موضوع الصلاحيات، لما لا تقومين فقط بتنفيذ استعلام يقوم بجلب بيانات المعلمين الخاصين بمدرسة المدير؟


$doctor = Doctor::find($target_doctor_id);

$doctor_school = $doctot->school_id;

$teachers = Teacher::where('school_id' ,$doctor_school)->get();

او يمكنك تنظيم العملية اكثر عن طريق علاقات Eloquent. حيث:

  • كل مدرسة تمتلك العديد من المعلمين. => علاقة one to many
  • كل مدرسة تمتلك مديرا واحدا. => علاقة one to one

يكون ناتج الاستعلام مشابها لـ:


$teachers_of_a_school = Doctor::find($target_doctor_id)
->school()
->teachers();

مقدمة إلى رابط الكائنات بالعلاقات Eloquent - موسوعة حسوب

كنت اريد ان اربط ذلك باعطاء username,password  لكل مدير مدرسه وعند فتح البرنامج يظهر له معلمين مدرسته فقط

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعات قال Hafsa Aly:

كنت اريد ان اربط ذلك باعطاء username,password  لكل مدير مدرسه وعند فتح البرنامج يظهر له معلمين مدرسته فقط

نعم، لن يكون ذلك مشكلة ايضا. 

يمكنك التعامل مع مسألة جلب بيانات معلمي مدرسة معينة بشكل مستقل تماما.

بتاريخ 2 ساعات قال Adnane Kadri:

لما لا تقومين فقط بتنفيذ استعلام يقوم بجلب بيانات المعلمين الخاصين بمدرسة المدير؟


$doctor = Doctor::find($target_doctor_id);

$doctor_school = $doctot->school_id;

$teachers = Teacher::where('school_id' ,$doctor_school)->get();

او يمكنك تنظيم العملية اكثر عن طريق علاقات Eloquent.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

ا

بتاريخ On 8/11/2022 at 21:16 قال Adnane Kadri:

نعم، لن يكون ذلك مشكلة ايضا. 

يمكنك التعامل مع مسألة جلب بيانات معلمي مدرسة معينة بشكل مستقل تماما.

 

شكرا لك . ولكن ايضا اذا اردت الربط في هذا المشروع بين المدرسة والادارة اي اذا اردا مدير المدرة مخاطبة الادارة والعكس ايضا من خلال المشروع فما الفكرة لعمل ذلك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...