2017-10-05 26 views
11

का उपयोग करके आप उपयोगकर्ता भूमिकाओं और अनुमतियों का प्रबंधन कैसे करेंगे, मैं एक नए एंगुलर 2 ऐप पर काम कर रहा हूं, और मैं सोच रहा था कि आप कुछ भूमिकाओं के लिए सुलभ मार्गों का प्रबंधन कैसे करेंगे, और कुछ निश्चित चीज़ों को बनाने, संपादित करने और हटाने के लिए अनुमतियां भूमिकाओं।एंगुलर 2

मुझे पता है कि आप कैसे इस समस्या को सुलझाने करना चाहती इस:

  • आप कैसे कुछ UI तत्व के लिए उपयोग का प्रबंधन? ऐप शो को कैसे जानता है या छुपाता है? क्या आप इसके लिए एकल सेवा का उपयोग करते हैं? या आप अपने ऐप में अलग-अलग जगहों के लिए अलग-अलग स्थितियां बनाते हैं?

  • आप अपना मार्ग कैसे प्रबंधित करते हैं? क्या आप CanActivate, CanActivateChild, CanLoad और आदि का उपयोग कर सकते हैं? क्या आप सभी मार्गों के लिए एक सिंगल गार्ड सेवा बनाते हैं या विभिन्न मॉड्यूल या घटक के लिए अलग-अलग सेवाएं बनाते हैं?

  • और अंतिम प्रश्न। ऐप को विभाजित करने का सबसे अच्छा तरीका तो आप इसे एक सीएमएस की तरह बेच सकते हैं। मेरा मतलब है कि उदाहरण के लिए हम बाजार से कुछ अन्य मॉड्यूल लोड करने की संभावना कैसे महसूस कर सकते हैं, और इसे अपने ऐप में जोड़ सकते हैं।

आप इसी तरह की समस्या को कैसे हल कर रहे हैं?

इन विषयों को कवर करने वाली सामग्री के लिए कोई मार्गदर्शन, अनुभव या पॉइंटर्स की सराहना की जाती है। अग्रिम में धन्यवाद।

+3

यह सवाल एसओ के क्यू/ए प्रारूप के लिए बहुत व्यापक है। किताबों के पूरे अध्याय हैं जो इन समस्याओं को हल करने के लिए कवर करते हैं। संक्षेप में: मार्ग, लेखक गार्ड, और मॉड्यूल। – axlj

+0

@axlj हाँ मैं इसे समझता हूं।और तुम सही हो लेकिन आप कितने लोगों को जानते हैं कि अब पुस्तकें पढ़ना पसंद नहीं है। और अधिक लोग जिनके पास कुछ प्रश्नों के बारे में अच्छे विचार हैं, वे इसके बारे में कभी भी एक पुस्तक नहीं लिखेंगे। लेकिन हो सकता है कि अगर इन सभी लोगों को थोड़ा सा जवाब लिखना पड़े तो हमारे पास एक ऐसा स्थान होगा जहां लोग जो पुस्तक पढ़ना पसंद नहीं करते हैं, वे इस बारे में पढ़ सकते हैं। और अपने स्वयं के कुछ जोड़ें :) –

+0

मैं आपको सुनता हूं, और मैं लंबी किताबें पढ़ने पर भी पसंद करता हूं। दुर्भाग्यवश, इस विशिष्ट प्रश्न का पूरा उत्तर केवल उस उपज को मिलेगा! – axlj

उत्तर

6

अपने प्रश्न का टिप्पणी में उल्लेख किया है, एक पूरा जवाब एक अतः प्रश्न/उत्तर के दायरे से बाहर है, और इसलिए आप अपने प्रश्न है कि कारण के लिए निकट भविष्य में बंद कर दिया गया है, लेकिन यहां आपके लिए कुछ त्वरित सुझाव है अपने आप को आगे देखने के लिए:

  • http/https के माध्यम से लॉगिन के दौरान/उसके बाद सर्वर से उपयोगकर्ता की अनुमतियां प्राप्त करें। इन अनुमतियों को कहीं भी स्टोर करें जो आपके ऐप के लिए समझ में आता है, शायद एक सेवा में। यदि आप जेडब्ल्यूटी का उपयोग कर रहे हैं, तो जेडब्ल्यूटी टोकन में अनुमतियां वापस की जा सकती हैं।

  • चीजों को सरल बनाने के लिए, केवल ग्राहक पर अनुमतियों से निपटें। सर्वर कोड के लिए भूमिकाएं हैं कि उपयोगकर्ता के पास कौन सी अनुमतियां हैं। ग्राहक पर अनुमतियों के साथ भूमिकाओं को भंग कर चीजों को हल करने की जरूरत नहीं है।

  • प्रमाणन गार्ड के साथ सुरक्षित मार्गों

  • * ngIf या के साथ व्यक्तिगत UI तत्व की रक्षा ngSwitch/* ngSwitchCase

  • गतिशील लोड हो रहा है एक बड़ा विषय क्षेत्र है - पर संसाधनों के बहुत सारे - इसके बारे में पढ़ा जाना वेब। हालांकि, जहां तक ​​मुझे पता है, जबकि आप आलसी लोड कर सकते हैं, उन्हें संकलन-समय पर एप्लिकेशन के लिए जाना जाना चाहिए। मुझे गलत हो सकता है, लेकिन मुझे नहीं लगता कि आप रनटाइम पर जो कुछ भी चाहते हैं उसे लोड कर सकते हैं।

4

यह प्रश्न काफी व्यापक है और मुझे यह बात नहीं है कि आप इस उत्तर में आसानी से इसे कवर कर सकते हैं। वहाँ मूलतः तीन चीजें इसे से जुड़े हैं

  • रूटिंग
  • गार्ड
  • मॉड्यूल

आप एकल गार्ड मॉड्यूल है कि पूरे अनुप्रयोग के लिए जाँच करेगा और सभी उप मार्गों होगा की आवश्यकता है गार्ड मार्ग के लिए एक बच्चे बनें। संक्षेप में यह आपके पूरे आवेदन के लिए वैश्विक गार्ड की तरह कार्य करेगा। और आपका मार्ग कम से कम कवर किया जाएगा। Guards

और अब मॉड्यूल के बारे में बात करना जो आपको सब कुछ सामान्य और विशेषीकृत मॉड्यूल में विभाजित करने और मॉड्यूल का पुन: उपयोग करने या स्वतंत्र रूप से इसका उपयोग करने की आवश्यकता है। यह आपको सीएमएस की तरह बेचने में मदद करेगा। Modules पर अधिक।

टिप्पणी - यह एक सटीक उत्तर लेकिन

2

तो मैं एक आवेदन मैं बाहर काम पर कुछ इस तरह लागू करने के लिए किया था आपकी समस्या का एक सार नहीं है, यह मैं इसे कैसे संभाला है।

auth.service.ts

public isManager(): boolean { 
    let isManager = false; 
    let user = this.getUserToken(); 
    //Stored my allowed groups in a config file, comma separated string 
    let allowedGroups = AuthenticationParams.filters.split(','); 
    let userGroups: any; 
    if (user !== null && user !== undefined) { 
     try { 
     let userGroups: any = user.role; 
     if (userGroups !== undefined && userGroups !== null && userGroups.length > 0) { 
      try { 
      userGroups.forEach((e: any) => { 
       if (allowedGroups.indexOf(e) > -1) { 
       isManager = true; 
       } 
      }); 
      } catch (e) { 
      if (allowedGroups.indexOf(userGroups) > -1) { 
       isManager = true; 
      } 
      } 
     } 
     } catch (e) { 
     isManager = false; 
     } 
    } 
    return isManager; 
} 

public getUserToken(): any { 
    return localStorage.getItem('jwtTokenName'); 
} 

मैं एक प्रमाणन गार्ड बनाया इस प्रकार है:

मैं एक प्रमाणन सेवा बनाया है, यह एक तरीका है कि जाँच की उपयोगकर्ता एक प्रबंधन भूमिका की थी है निहित:

guard.component.ts

import { Injectable, OnInit } from '@angular/core'; 
import { CanActivate, CanActivateChild } from '@angular/router'; 
import { Router } from '@angular/router'; 
import { AuthenticationService } from '../services/helper/security/auth.service'; 

@Injectable() 
export class GuardComponent implements CanActivate { 

    constructor(private authenticationService: AuthenticationService, private _router: Router) { 
    } 

    canActivate() { 
    let isManager: boolean = this.authenticationService.isManager(); 
    if (!isManager) { 
     this._router.navigate(['unauthorized']); 
    } 
    return isManager; 
    } 
} 

guard.module.ts

import { NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { GuardComponent } from './guard.component'; 

@NgModule({ 
    declarations: [], 
    imports: [ CommonModule ], 
    exports: [], 
    providers: [ GuardComponent ], 
}) 
export class GuardModule { } 

मैं तो उस व्यवस्थापक अनुभाग के लिए नेविगेशन संभालती

एप्लिकेशन-routing.module.ts

{ path: 'management', component: AdminComponent, canActivate: [GuardComponent] } 
मेरे मार्ग के लिए गार्ड का इस्तेमाल किया

मेरी नेविगेशन बार पर मैं केवल isManager विधि को कॉल करता हूं और उसे एक चर पर संग्रहीत करता हूं और इसका उपयोग wheth निर्धारित करने के लिए करता है एर या प्रबंधन प्रबंधन को प्रदर्शित करने की आवश्यकता नहीं है या नहीं।

navbar.component.ts

public isManager: boolean = false; 

ngOnInit(): void { 
    this.isManager = this.authenticationService.isManager(); 
} 

navbar.component.html

<li [routerLinkActive]="['active']" *ngIf="isManager"><a [routerLink]="['management']">Management Portal</a></li> 

मैं प्रत्येक विधि से कुछ डेटा को हटाने के लिए लिया है, लेकिन यह आप दे देंगे मूल विचार। उम्मीद है कि यह मदद करता है।