Delon ACL
Delon ACL
使用
ACLService
核心是 ACLService,See:https://github.com/ng-alain/delon/blob/master/packages/acl/src/acl.service.ts
它注入了 AlainConfigService, 取出 "acl" 部分作为数据来源。
默认的 AlainACLConfig 只有一个属性 guard_url,表示没有权限的跳转地址
import type { AlainACLConfig } from '@delon/util/config';
export const ACL_DEFAULT_CONFIG: AlainACLConfig = {
guard_url: `/403`
};
See: https://github.com/ng-alain/delon/blob/master/packages/acl/src/acl.config.ts
can(), 检查是否拥有对应的角色,内部使用了 ACLType 类型的数据
/**
* NOTE:`ACLType` 类型可能会被其他类库所引用,为了减少类库间彼此的依赖性,其他类库会以复制的形式存在
* 当这里有变化时,请务必同步更新,涉及:`MenuService.acl`、`util.AlainACLType`
* TODO: 尝试增加 `@delon/core` 类库用于处理这种通用型
*/
import { Injector } from '@angular/core';
import { Observable } from 'rxjs';
import type { ACLService } from './acl.service';
export interface ACLType {
/**
* 角色
*/
role?: string[];
/**
* 权限点
*/
ability?: number[] | string[];
/**
* Validated against, default: `oneOf`
* - `allOf` the value validates against all the roles or abilities
* - `oneOf` the value validates against exactly one of the roles or abilities
*/
mode?: 'allOf' | 'oneOf';
/**
* 是否取反,即结果为 `true` 时表示未授权
*/
except?: boolean;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[key: string]: any;
}
export type ACLCanType = number | number[] | string | string[] | ACLType;
export type ACLGuardFunctionType = (srv: ACLService, injector: Injector) => Observable<ACLCanType>;
export type ACLGuardType = ACLCanType | Observable<ACLCanType> | ACLGuardFunctionType;
See: https://github.com/ng-alain/delon/blob/master/packages/acl/src/acl.type.ts
ACLGuard 使用来自路由定义的 data 属性提供的权限数据,可以包括两个部分
- guard, 描述所需权限的数据对象,或者一个返回权限数据的函数
- guard_url,不能通过权限检查的时候,跳转到的目标地址
内部首先取得来自路由定义的权限数据 data, 然后调用 ACLService 的 can() 来判断是否拥有适当的权限
See: https://github.com/ng-alain/delon/blob/master/packages/acl/docs/guard.zh-CN.md
See: https://github.com/ng-alain/delon/blob/master/packages/acl/src/acl-guard.ts
使用
例如,当用户登录之后,获得用户身份信息,调用 setRole( ["admin", "manager", "user"] ) 来设置当前用户所拥有的角色。
以后,可以在路由上配置
{
path: 'auth',
canActivate: [ ACLGuard ],
data: {
guard: {
role: [ 'admin' ],
ability: [ 10, 'USER-EDIT' ],
mode: 'allOf'
} as ACLGuardType,
guard_url: '/no-permisseion'
}
},
Button 中使用 ACL
<button nz-button [acl]="'role-a'">role-a</button>
<button nz-button [acl]="'role-b'" class="ml-sm">role-b</button>
Delon ACL的更多相关文章
- [开源]OSharpNS 步步为营系列 - 5. 添加前端Angular模块[完结]
什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...
- haproxy利用ACL规则封禁自定义IP地址拒绝访问
现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile 403 /etc/haproxy/err ...
- HAProxy的日志配置以及ACL规则实现负载均衡
HAProxy配置日志策略 默认情况下,HAProxy是没有配置日志的在centos6.3下默认管理日志的是rsyslog,可以实现UDP日志的接收,将日志写入文件,写入数据库先检测rsyslog是否 ...
- CISCO VLAN ACL
对于cisco VLAN ACL 首先得定义 standard ACL或 extented ACL用于抓取流量 注意这里的抓取流量不是最终的对流量的操作,而是决定什么样的流量用VLAN ACL 来处理 ...
- MAC OS X的ACL扩展权限设置
在WEB开发时,网站是以_www的用户运行的,而我在本地是以liuwencan的用户编辑的.这就带来一个问题:如果所有文件属于liuwencan,那么网站运行需要写文件时就因无权限而失败:如果所有文件 ...
- linux ACL权限规划:getfacl,setfacl使用
ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户.单一文件 ...
- ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...
- Centos下ACL(访问控制列表)介绍(转)
我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...
- ACL权限设置命令setfacl和getfacl命令
ACL权限设置命令setfacl和getfacl命令 setfacl命令是用来在命令行里设置ACL(访问控制列表).在命令行里,一系列的命令跟随以一系列的文件名. [TOC] 选项 |参数|说明| ...
- ZooKeeper设置ACL权限控制
ZK的节点有5种操作权限:CREATE.READ.WRITE.DELETE.ADMIN 也就是 增.删.改.查.管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)注:这5种权限中,del ...
随机推荐
- Blinn-Phong
为什么出现Blinn-Phong 虽然Phong性能较高,但是在某些镜面反射条件下就会失效.比如下图,我们明显发现了一条明显的亮暗边界线,这在实际场景中是不应该发生的(实际场景中不会出现这种明显的过渡 ...
- 一些OI常用小技巧啊
1.卡常 \[---总有人以为自己比编译器聪明 \;\;\;by\;\;bezel \] 我们可能确实没有编译器聪明,但是,为了防止CCF的老人机出现什么问题,卡一卡常还是有必要的. 如果实在被逼无奈 ...
- 24. echarts 可以画哪些图表
1. 折线图 2. 柱状图 3. 饼图 4. 地图 5. 雷达图 延申问题:画折线图和柱状图哪些配置可以改变样式 1. color 设置每个数据的颜色 2. grid 网格设置图表的大小 3. s ...
- KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
为什么开源 KubeEye Kubernetes 作为容器编排的事实标准,虽然架构优雅功能也非常强大,但是 Kubernetes 在日常运行过程中总会有一些疑难杂症和隐性的问题让集群管理员和 Yaml ...
- Kubernetes CNI 插件选型和应用场景探讨
作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.KubeKey 等. 本文介绍容器环境常见网络应用场景及对应场景的 ...
- MiGPT让你的小爱音响更聪明
大家好,我是晓凡. 今天要给大家带来一个超级有趣的开源项目MiGPT. 这个项目,简直就是给小爱音箱装上了超级大脑,让你的小爱音箱更聪明. 想象一下,当小爱音箱接入大模型后,上知天文,下知地理,从&q ...
- 下一代云电脑技术来临,为什么PC Farm才是未来,以ToDesk为例
近年来飞速发展的云电脑技术,正在挤压传统电脑的生存空间.由于用户对电脑计算能力的要求日益增高,而传统电脑往往会受限于硬件性能无法更新,更换花费较高等因素,难以满足用户对高性能电脑的期待. 与此同时,下 ...
- Nuxt.js 应用中的 builder:watch 事件钩子详解
title: Nuxt.js 应用中的 builder:watch 事件钩子详解 date: 2024/10/24 updated: 2024/10/24 author: cmdragon excer ...
- Java高并发,ArrayList、HashSet、HashMap不安全的集合类
首先是我们的ArrayList: 这次我们讲解的是集合的不安全,首先我们都知道ArrayList吧! List<String> list=new ArrayList<>(); ...
- 遗传算法+强化学习—TPG—Emergent Tangled Graph Representations for Atari Game Playing Agents
最近在看进化算法在强化学习(RL)领域的一些应用,有些论文中将使用进化算法解决强化学习问题的算法归为非强化学习算法,然而又有些论文把使用进化算法解决强化学习问题的算法归为强化学习算法,不过更多的论文是 ...