首页 > 其他分享 >Delon ACL

Delon ACL

时间:2023-03-23 10:05:10浏览次数:41  
标签:权限 blob acl guard delon ACL type Delon

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>



  冠军

标签:权限,blob,acl,guard,delon,ACL,type,Delon
From: https://blog.51cto.com/u_8130830/6144374

相关文章

  • oracle 条件查询失败
    Preparing:SELECTaccuse_id,receive_channel,industry_category,delegate_flag,transfer_department,accuse_content,accuser_type,accuser_id_no,accuser_name,accuser_......
  • Zabbix安装Oracle监控(agent2+ODBC)
    环境CentOS7.5+Zabbix5.0LTSagent2方式监控前提官方提供的agent2支持的Oracle版本需要满足Oralce12C(12.2)及以上,低版本不支持,可能会报如下错 服务端导入模板可......
  • Oracle nullif函数使用
    nullif函数使用简单来说,就是表达式1的值和表达式2的值进行对比可以使用‘’字符selectnullif('','1111')fromdual输出为空不可以使用null字符selectnullif(nul......
  • Oracle 数据库 官方下载 安装 及配置监听
    Oracle数据库官方下载安装及配置监听1、Oracle官方下载推荐使用官方下载地址:https://edelivery.oracle.com/osdc/faces/SoftwareDelivery;这是Oracle的一个......
  • 不同模式下删除Oracle数据表的三个实例
    首发微信公众号:SQL数据库运维原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd......
  • oracle使用存储过程返回游标实现报表查询
    最近在oracle中通过存储过程实现一个报表查询,查询涉及到数据计算这里使用了临时表和存储过程实现输出查询,java接受游标变量返回结果集第一步、创建统计使用的临时表CREA......
  • Oracle在select中写入子查询并限制唯一
    selectta.*,(selectfiled1from(selectrow_number()over(partitionbytt.fl_idorderbytt.fd_datedesc)fl_rn,tt.fl_id,filed1fr......
  • Oracle-nologging 应用
    我们在使用MSSqlServer时,为了提高DML速度,往往会用nolog来设置语句不写日志,这样语句执行过程就会快一些。同样,在删除数据时,也会用truncatetabletbName来替代delete......
  • [20230320]oracle各种name参数.txt
    [20230320]oracle各种name参数.txt--//如果讲oracle的各种name参数,很容易混乱,特别对于初学者.通过一个简单例子概括总结一下.--//主要集中在DB_NAME,DB_UNIQUE_NAME,SE......
  • Oracle/Mysql/SqlServer 常用函数区别
    1.类型转换   --Oracle  select to_number('123') from dual;  --123;   select to_char(33) from dual;       --33;  select to_date('......