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 ... 
随机推荐
- 《HelloGitHub》第 102 期
			兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ... 
- ROS基础入门——实操教程
			ROS基础入门--实操教程 前言 本教程实操为主,少说书.可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记. Ruby Rose,放在这里相当合理 前言 ... 
- 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年8月刊
			本文为大家整理了墨天轮数据社区2024年8月发布的优质技术文章/文档,主题涵盖Oracle.MySQL.PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查, ... 
- markdown的html优雅使用语法(2024/10/10guixiang原创)
			一:图片部分 第一范式 图 2 全字段排序 <center> <img style="border-radius: 0.3125em; box-shadow: 0 2px ... 
- blocks 单调栈、单调队列题解
			blocks题解: 1.题面: 2.分析: 题意大概就是说,找一段最长的区间,并且这段区间的平均值>=k,那么我们可以对他的每一个值减去k,最终求和>=0即可. 那我们需要对每个可能的左端 ... 
- Fluent Operator 2.5.0 发布:新增多个插件
			日前,Fluent Operator 发布了 v2.5.0. Fluent Operator v2.5.0 新增 11 个 features, 其中 Fluent Bit 新增支持 7 个插件, Fl ... 
- md转换成_post下直接使用的文件
			md转换成_post下直接使用的文件 package org.example; import java.io.File; import java.io.IOException; import java ... 
- Re:从零开始的pwn学习(栈溢出篇)
			写在前面:本文旨在帮助刚接触pwn题的小伙伴少走一些弯路,快速上手pwn题,内容较为基础,大佬轻喷.本文默认读者明白最基础的汇编指令的含义,并且已经配置好linux64位环境,明白基础的Linux指令 ... 
- NOIP2024模拟3:一路破冰
			NOIP2024模拟3:一路破冰 雨后的青山.--240316 A-无向图删边 一句话题面:规定一轮中的删边方式为:按边权递减且每轮删掉的边集中没有环.问每条边会在第几轮被删除. 暴力的想法就是跑 \ ... 
- [Apache Doris]  Apache Doris 架构及代码目录解读
			一.系统架构 Doris是一个MPP的OLAP系统,主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格 ... 
