البرمجة

استخدام CanActivate و CanActivateChild في المسارات بدون مكون

التفاصيل الموجودة في الوثائق الخاصة بإطار العمل Angular2 حول حراس المسارات تركتني في حالة من الارتباك بخصوص متى يكون من المناسب استخدام حراس CanActivate مقابل حارس CanActivateChild بالتزامن مع مسارات بدون مكون.

في النسخة المختصرة: ما الفائدة من وجود canActivateChild عندما يمكنني استخدام مسارات بدون مكون مع canActivate لتحقيق نفس التأثير؟

النسخة الطويلة:

الفكرة الأساسية تتمثل في إمكانية وضع الحراس في كل مستوى من تسلسل التوجيه الخاص بالتطبيق. يقوم الموجه بفحص حراس CanDeactivate و CanActivateChild أولاً، من أعمق مسار فرعي إلى الأعلى. ثم يقوم بفحص حراس CanActivate من الأعلى إلى الأسفل في أعماق مسار الفرع.

فهمت أن CanActivateChild يتم فحصه من الأسفل إلى الأعلى و CanActivate يتم فحصه من الأعلى إلى الأسفل. الأمر الذي لا يبدو منطقياً بالنسبة لي هو المثال التالي الذي يأتي في الوثائق:

typescript
@NgModule({ imports: [ RouterModule.forChild([ { path: 'admin', component: AdminComponent, canActivate: [AuthGuard], children: [ { path: '', canActivateChild: [AuthGuard], children: [ { path: 'crises', component: ManageCrisesComponent }, { path: 'heroes', component: ManageHeroesComponent }, { path: '', component: AdminDashboardComponent } ] } ] } ]) ], exports: [ RouterModule ] }) export class AdminRoutingModule {}

لذلك يحتوي المسار admin على مسار بدون مكون:

التحقق من مسار الأب تحت AdminComponent، لدينا مسار مع خاصية مسار وأطفال لكنه لا يستخدم مكونًا. لم نرتكب خطأ في تكويننا، لأنه يمكننا استخدام مسار بدون مكون.

لماذا يقوم الكود في هذه الحالة بإدراج AuthGuard في المكون الفرعي وفي المكون الجذر (المسار admin)? أليس كافياً أن يتم التحقق في المكون الجذر؟

لقد قمت بإنشاء نموذج (plunkr) مستند إلى المثال يقوم بإزالة canActivateChild: [AuthGuard] وإضافة زر تسجيل الخروج على لوحة القيادة للمشرف. بالطبع، يواصل تحقق canActivate من المسار الأب، فما الفائدة من وجود canActivateChild عندما يمكنني استخدام مسارات بدون مكون مع canActivate؟

المزيد من المعلومات

الفهم الصحيح لهذه الأسئلة يتطلب نظرة عميقة إلى كيفية عمل حراس المسارات وكيفية تطبيقها في البيئات المختلفة. دعونا نقوم بتفحص الأمثلة والمفاهيم لنوضح الفوائد والاستخدام الصحيح لكل من CanActivate و CanActivateChild في السياق الخاص بالمسارات بدون مكون.

أولًا، نحن نفهم أن CanActivate يتحقق من صلاحية دخول المكون المرتبط بالمسار الحالي، بينما يتحقق CanActivateChild من صلاحية دخول المكونات الفرعية للمسار الحالي. وعندما يتعلق الأمر بالمسارات بدون مكون، فإن الاستخدام السليم لهذه الحراس يعتمد على هيكل التطبيق ومتطلبات الأمان الخاصة به.

في المثال الذي قدمته، المسار “admin” يحتوي على مسار فرعي فارغ، أي مسار بدون مكون، ويستخدم الحارس CanActivate للتحقق من صلاحية الوصول إلى هذا المسار. لكن يتم أيضًا استخدام CanActivateChild لضمان صلاحية دخول المكونات الفرعية لهذا المسار الفارغ.

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

بشكل عام، يعتمد الأمر على متطلبات التصميم والأمان الخاصة بتطبيقك. قد تكون هناك حالات حيث يكون من الضروري استخدام CanActivateChild حتى مع المسارات بدون مكون، بينما قد تكون الحالة مختلفة في سيناريوهات أخرى. يجب على المطورين فهم متطلبات تطبيقهم بشكل جيد وتطبيق الحلول المناسبة بناءً على ذلك.

بالنهاية، الفهم الدقيق لهذه النقاط يساعد في بناء تطبيقات أكثر أمانًا وفعالية، ويضمن الوصول إلى المكونات بطريقة متوافقة مع متطلبات الأمان والمنطق التطبيقي.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر