मैं अपने कोणीय प्रोजेक्ट पर रोलगार्ड सेवा लागू करने की कोशिश कर रहा हूं। मेरे पास एक मार्ग संरक्षित है जहां उपयोगकर्ता को एक विशिष्ट भूमिका की आवश्यकता होती है।

export class RoleGuardService implements CanActivate {

  constructor(public loginService: LoginService, public router: Router) { }

  canActivate(route: ActivatedRouteSnapshot): boolean {

    const expectedRole = route.data.expectedRole;
    const userDetails = this.loginService.getUserDetails();

    if (userDetails != null) { 
      console.log('not null');

      userDetails.roles[0].forEach(e => {
        if(e.name === expectedRole){
          console.log('return true');
          return true;
        }
      });
    }

    this.router.navigate(['login']);
    console.log('return false');
    return false;
  }
}

अपेक्षित रोल वाले उपयोगकर्ता के लिए मार्ग पर क्लिक करते समय मुझे शून्य नहीं दिखाई देता है, सही है, कंसोल में झूठी वापसी करें .. मेरे पास बूलियन लौटने को सक्रिय कर सकता है। loginService पर कॉल करें।

public getUserDetails() {
    return this.jwtHelper.decodeToken(sessionStorage.getItem('AuthToken'));
  }

कृपया मदद करें, इसी तरह के अन्य प्रश्नों में http अनुरोध शामिल है जो मैं यहां नहीं कर रहा हूं। उम्मीद है कि कुछ आसान मैं याद कर रहा हूँ। अग्रिम में धन्यवाद।

0
jonesy 12 अप्रैल 2018, 18:03

2 जवाब

सबसे बढ़िया उत्तर

आप प्रत्येक दायरे के अंदर सच लौट रहे हैं। आपको इसे बाहर करना होगा:

export class RoleGuardService implements CanActivate {

  constructor(public loginService: LoginService, public router: Router) { }

  canActivate(route: ActivatedRouteSnapshot): boolean {

    const expectedRole = route.data.expectedRole;
    const userDetails = this.loginService.getUserDetails();

    if (userDetails !== null) { 
      console.log('not null');
      if (userDetails.roles[0].some(e => e.name === expectedRole)) {
          return true;
      }
    }

    this.router.navigate(['login']);
    console.log('return false');
    return false;
  }
}

आपको कामयाबी मिले!

1
Alan Grosz 12 अप्रैल 2018, 18:18

जावास्क्रिप्ट array.forEach(...) को केवल एक अपवाद फेंक कर रोका जा सकता है (देखें यहां)।

यदि आप अपने लूप को रोकना चाहते हैं, तो बस एक साधारण for-loop का उपयोग करें:

...
for(let i = 0; i < userDetails.roles[0].length; i ++) {
    let e = userDetails.roles[0][i];
    if(e.name === expectedRole){
        console.log('return true');
        return true;
    }
});
...
1
Batajus 12 अप्रैल 2018, 18:15