0

我有一个简单的问题。如何将一个通用功能注入到许多组件中。

我有一个名为 add-users 的组件,我希望它只能由管理员看到。为此,我为所有用户添加了一组权限,并且我想将一个通用函数注入到许多组件中,以检查用户是否有权查看它们。不用担心黑客,因为在后端进行了另一项检查,即使人们为自己添加权限,他们仍然无法使用管理功能。

例子:

<add-users [required-permissions]></add-users>
4

2 回答 2

1

JB Nizet 给出了最接近的答案。

我这样做是为了,每当用户登录时,他/她的所有权限都会从后端发送到前端并存储在 localStorage 数组中。

然后我将一个全局服务类注入到我的 angular2 应用程序中

import { Injectable, Inject } from '@angular/core';
import { Observable } from "rxjs/Observable";

import globals = require('./../globals');

import { ShoppingCart } from './../Models/ShoppingCart';

@Injectable()
export class PermissionsEngine {
private userPermissions: Array<String> = Array<String>();
private permissionsString = "";

constructor()  {
    this.calcPermissions();
}

calcPermissions() {
    this.permissionsString = localStorage.getItem("permissions");
    if ( this.permissionsString ) {
        this.userPermissions = this.permissionsString.split(",");
    } else {
        this.userPermissions = new Array<String>();
    }
}

hasPermission( _slug: string ) {
    if ( this.userPermissions.indexOf( _slug ) != -1 ) {
        return true;
    }

    return false;
}
}

这可以注入组件并从应用程序的任何位置调用

<div *ngIf="_permissionsEngine.hasPermission('add_users')"></div>

希望这对某人有帮助!

于 2016-08-20T21:11:42.393 回答
0

有一个称为CASL的同构授权库。您可以阅读它在 Aurelia 应用程序中的集成:

https://medium.com/@sergiy.stotskiy/casl-based-authorization-in-aurelia-app-3e44c0fe1703

并通过canAngular2+ 中的自定义管道以类似的方式完成

于 2017-07-27T16:55:52.730 回答