【Angular 】Angular 模板中基于角色的访问控制

您是否在Angular模板中实现角色库访问控制?一种方法是通过*ngIf,但我不会选择该路径,因为它将在Angular模板中包含自定义函数,并且很难维护。正确的方法是使用Angular结构指令🚀.

什么是RBAC?

基于角色的访问控制(RBAC)是指根据用户在组织中的角色为其分配权限的想法。它提供了一种简单、可管理的访问管理方法,与单独为用户分配权限相比,这种方法更不容易出错。

实施

假设我们有一个具有3个属性的帐户接口:id、name和roles。角色是枚举类型的数组,可以表示我们的帐户可以具有的不同角色,包括ADMIN、USER、EDITOR、VIEWER。

export interface IAccount {id: number;name: string;roles: ERoles[]
}export enum ERoles {admin = 'ADMIN',user = 'USER',editor = 'EDITOR',viewer = 'VIEWER'
}

而不是 *ngIf 我们想要一个自定义结构指令,它接受应该显示模板的角色以及可以检查哪些角色的帐户。

import { Directive, Input, OnChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { ERoles, IAccount } from '../../interfaces/account.interface';@Directive({selector: '[hasRoles]'
})
export class HasRolesDirective implements OnChanges {private visible: boolean;private roles: ERoles[];private account: IAccount;@Input() set hasRoles(roles: ERoles[]) {this.roles = roles;}@Input('hasRolesFor') set hasRolesFor(account: IAccount) {this.account = account;};constructor(private templateRef: TemplateRef<unknown>, private viewContainer: ViewContainerRef) {}ngOnChanges(): void {if (!this.roles?.length || !this.account) {return;}if (this.visible) {return;}// check if account roles include at least one of the input rolesif (this.account.roles.some(role => this.roles.includes(role))) {this.viewContainer.clear();this.viewContainer.createEmbeddedView(this.templateRef);this.visible = true;return;}this.viewContainer.clear();this.visible = false;}}

如何使用它?

特别是在组件的typescript文件中,您需要帐户和角色数组(为了类型安全),如下所示:

account: IAccount = {id: 1,name: 'Klajdi',roles: [ERoles.editor],
};roles: typeof ERoles = ERoles;

然后在您想要的任何模板的HTML标记中使用它。我将在下面展示两个示例:

<div *hasRoles="[roles.editor]; for: account">Editor only</div>
<div *hasRoles="[roles.user, roles.viewer]; for: account">User and viewer only</div>

这就是它在浏览器中打印的内容:

我们有了它。由于我只给了我的帐户EDITOR的角色,它只能看到EDITOR的div🚀🚀.

现在更容易处理角色了。该指令可扩展到您想要应用的任何其他逻辑。您可以为它编写单元测试,这样新的开发人员在编写新代码时就不会破坏逻辑。在每个模板中使用*ngIf是我们无法想象的。😀

就是这样

像往常一样,感谢您的阅读。我很感激你花时间阅读我的内容和故事。我希望你能觉得这篇文章有用。如果你喜欢,就给它👏👏 并且毫不犹豫地跟随。

敬请关注,编码快乐!

本文:【Angular 】Angular 模板中基于角色的访问控制 | 开发者开聊

自我介绍

  • 做一个简单介绍,酒研年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师研究会】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。
  • 企业架构师需要比较广泛的知识面,了解一个企业的整体的业务,应用,技术,数据,治理和合规。之前4年主要负责企业整体的技术规划,标准的建立和项目治理。最近一年主要负责数据,涉及到数据平台,数据战略,数据分析,数据建模,数据治理,还涉及到数据主权,隐私保护和数据经济。 因为需要,比如数据资源入财务报表,另外数据如何估值和货币化需要财务和金融方面的知识,最近在学习财务,金融和法律。打算先备考CPA,然后CFA,如果可能也想学习法律,备战律考。
  • 欢迎爱学习的同学朋友关注,也欢迎大家交流。全网同号【架构师研究会】

欢迎收藏  【全球IT瞭望】,【架构师酒馆】和【开发者开聊】.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307340.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年底离职潮来了!来聊聊程序员的离职跳槽

每当元旦春节将至的时候&#xff0c;办公室的气氛也诡异起来&#xff0c;空气弥漫着离职的味道。因为积累许久的负面情绪长期无法获得释放&#xff0c;打工人对工作的容忍度越发稀薄了起来&#xff0c;有的打工人看似正襟危坐地坐在工位上&#xff0c;实则愤然辞职的念头在心里…

STM32F030F4P6 ADC多通道定时器触发DMA搬运

配置多通道ADC 配置定时器1s读一次 主函数中等待转换完成的标志位&#xff0c;然后打印出来。 uint16_t adc_buffer[2] {0}; uint8_t adc_flag; float curr,vol;HAL_ADCEx_Calibration_Start(&hadc); HAL_TIM_Base_Start(&htim3); HAL_ADC_Start_DMA(&hadc,(uint3…

悔不该用中文作为Windows的用户名啊~

前言 汉字在中华文明已经有了几千年的历史&#xff0c;小伙伴们所使用名字更是伴随了自己一生。所以小白们在拿到自己的新电脑&#xff0c;总会想着把自己的中文名字设置为电脑的用户名&#xff0c;这样更能显示出那是自己的专属电脑&#xff01; 一开始小白也是这么想的&…

C/C++ 函数参数按引用传递、指针传递、实参传递

引用经常被用作函数参数&#xff0c;使得函数中的变量名成为调用程序中的变量的别名。这种传递参数的方法称为按引用传递。按引用传递允许被调用的函数能够访问调用函数中的变量。C新增的这项特性是对 C语言的超越&#xff0c;C语言只能按值传递。按值传递导致被调用函数使用调…

电脑报错缺失vcomp140.dll无法执行代码怎么解决?快速的修复vcomp140.dll方案

vcomp140.dll无法执行代码怎么解决&#xff1f;vcomp140.dll是常见的系统文件&#xff0c;许多用户遇到它缺失导致程序无法运行的问题。本文旨在提供彻底解决此问题的方法&#xff0c;并对vcomp140.dll文件本身进行了简要说明。 以下是几种修复缺失的vcomp140.dll文件的方法 第…

车载导航定制_ 基于联发科MT6737核心板的车载终端解决方案

近年来&#xff0c;车载导航在智能化和功能化方面得到了长足的发展&#xff0c;不再仅仅局限于导航功能&#xff0c;而是集成了多种驾驶辅助功能&#xff0c;为驾驶者提供了全方位的行车辅助体验。这些功能包括车辆行车记录、倒车影像、AR实景导航、语音助手、ADAS辅助、云电子…

C++ Qt开发:SqlRelationalTable关联表组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍SqlRelationalTable关联表组件的常用方法及灵…

MySQL的高级SQL语句

目录 1.mysql高阶查询 select&#xff1a;显示表格中一个或数个字段的所有数据记录 distinct&#xff1a;不显示重复的数据记录 where&#xff1a;有条件查询 AND OR &#xff1a;且 或 in&#xff1a;显示已知值的数据记录 between&#xff1a;显示两个值范围内的数据记…

rime中州韵 自定义词典

在使用 rime 输入法的过程&#xff0c; 我们往往会需要增加一些个个性化的词条&#xff0c;这些词条我们可能通过自定义词典的方式来管理和使用。 Custom_phrase.txt 首先&#xff0c;我们需要有一个词典文档&#xff0c;这里我们把 Custom_phrase.txt 文档作为我们的自定义文…

【WordPress插件】热门关键词推荐v1.3.0 Pro开心版

介绍&#xff1a; WordPress插件-WBOLT热门关键词推荐插件&#xff08;Smart Keywords Tool&#xff09;是一款集即时关键词推荐、关键词选词工具及文章智能标签功能于一体的WordPress网站SEO优化插件。 智能推荐&#xff1a; 热门关键词推荐引擎-支持360搜索、Bing、谷歌&a…

五个步骤,帮你实现健康减调目标

由于现代生活节奏快、工作压力大&#xff0c;在追求美好生活的过程中&#xff0c;很多人都顾不上饮食好不好&#xff0c;身体健不健康的问题了&#xff0c;直到身体开始横向发展&#xff0c;这才开始有人意识到了肥胖的问题以及它的危害。健康与肥胖是此消彼长的&#xff0c;身…

YoloV8改进策略:基于自研的图注意力机制改进| 独家改进方法|图卷积和注意力融合模块

摘要 SE注意力机制是一种通过显式建模卷积特征的信道之间相互依赖性的方法,旨在提高网络产生的表示的质量。SE注意力机制包括两个步骤:Squeeze和Excitation。在Squeeze步骤中,通过全局平均池化操作将输入特征图压缩成一个向量,然后通过一个全连接层将其映射到一个较小的向…