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的更多相关文章

  1. [开源]OSharpNS 步步为营系列 - 5. 添加前端Angular模块[完结]

    什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...

  2. haproxy利用ACL规则封禁自定义IP地址拒绝访问

    现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile       403 /etc/haproxy/err ...

  3. HAProxy的日志配置以及ACL规则实现负载均衡

    HAProxy配置日志策略 默认情况下,HAProxy是没有配置日志的在centos6.3下默认管理日志的是rsyslog,可以实现UDP日志的接收,将日志写入文件,写入数据库先检测rsyslog是否 ...

  4. CISCO VLAN ACL

    对于cisco VLAN ACL 首先得定义 standard ACL或 extented ACL用于抓取流量 注意这里的抓取流量不是最终的对流量的操作,而是决定什么样的流量用VLAN ACL 来处理 ...

  5. MAC OS X的ACL扩展权限设置

    在WEB开发时,网站是以_www的用户运行的,而我在本地是以liuwencan的用户编辑的.这就带来一个问题:如果所有文件属于liuwencan,那么网站运行需要写文件时就因无权限而失败:如果所有文件 ...

  6. linux ACL权限规划:getfacl,setfacl使用

    ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户.单一文件 ...

  7. ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表

    zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...

  8. Centos下ACL(访问控制列表)介绍(转)

    我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...

  9. ACL权限设置命令setfacl和getfacl命令

    ACL权限设置命令setfacl和getfacl命令 setfacl命令是用来在命令行里设置ACL(访问控制列表).在命令行里,一系列的命令跟随以一系列的文件名. [TOC] 选项 |参数|说明|   ...

  10. ZooKeeper设置ACL权限控制

    ZK的节点有5种操作权限:CREATE.READ.WRITE.DELETE.ADMIN 也就是 增.删.改.查.管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)注:这5种权限中,del ...

随机推荐

  1. 课时05:Linux必备系统命令

  2. excel江湖异闻录--渣渣

    有朋友问过我,为什么要写这些,细细思量,一来我喜欢这个纯粹的江湖,二则向这些纯粹的高手.大神致敬,三是纪念一下自己学习EXCEL的历程. 其实,每一个篇章都有一个逻辑,只不过这个逻辑,不是按照实力的高 ...

  3. excel江湖异闻录--Klaus

    最开始接触数组公式,是偶然在公众号看到"看见星光"大佬的一个提取混合文本中电话号码的公式,记得当时大佬是用vlookup解的这题,当时完全不能理解,mid中第二参数为什么是个row ...

  4. Android Qcom USB Driver学习(十四)

    UDC-Gadget UDC:(USB Device Controller)用于管理和控制USB设备与主机之间的通信. Gadget:Android在此层实现了adb,mtp(Media Transf ...

  5. Java日期时间API系列40-----中文语句中的时间语义识别(time NLP)代码实现分析

    从上篇 Java日期时间API系列39-----中文语句中的时间语义识别(time NLP 输入一句话,能识别出话里的时间)原理分析 中得知解析的主要步骤分为三步: (1)加载正则文件 (2)解析中文 ...

  6. 使用 GitLab 账号登陆 KubeSphere

    作者:李帅 介绍 KubeSphere 多租户是实际生产使用中非常需要的一个功能,该功能满足不同用户登陆 KubeSphere 平台的需求.比如开发,运维,测试都需要登陆 KubeSphere 平台, ...

  7. WSGI、mini-web框架

    阅读目录: 1.服务器动态资源请求 2.应用程序示例 3.Web 动态服务器 4.mini-web框架-1-文件结构 5.mini-web框架-2-显示页面 6.mini-web框架-3-替换模板 一 ...

  8. CSS动画(轮播图)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa78enaFEibNNCoXO9Hr2PI7boFTRgZHl3icicXwzLGLTQPxCl ...

  9. jQuery 杂项方法-grep()_20220114

    jQuery 杂项方法-grep() 实例: var targetEmpArr = $.grep(empArr, function(elem,index){ return elem.empCode = ...

  10. att&ck框架学习笔记3

    https://blog.csdn.net/m0_38103658/article/details/106517758?utm_medium=distribute.pc_relevant.none-t ...