精华内容
下载资源
问答
  • Mac 隐私数据服务访问权限,macOS Catalina 权限管理 tccutil命令用法: tccutil command service [bundle_id] tccutilresetScreenCapture tccutil resetMicrophone tccutil reset Camera tccutil reset ...

    Mac 隐私数据服务访问权限,macOS Catalina 权限管理

    tccutil命令用法:

    tccutil command service [bundle_id]

     

    tccutil reset ScreenCapture

    tccutil reset Microphone

    tccutil reset Camera

     

    tccutil reset AppleEvents (Automation)

     

    tccutil reset SystemPolicyDesktopFolder

    tccutil reset SystemPolicyDownloadsFolder

    tccutil reset SystemPolicyDocumentsFolder

     

    tccutil reset AddressBook

     

    tccutil reset All com.apple.Terminal

     

    tccutil reset All

    展开全文
  • geoserver 编辑WFS服务时,设置角色权限,Grant access to any role

    在这里插入图片描述
    geoserver 编辑WFS服务时,设置角色权限,Grant access to any role

    展开全文
  • 【问题】系统管理中的角色权限管理,数据权限是干什么的?具体的应用场景说明下。【解答】配置数据权限控制的作用...图1数据权限控制的应用场景背景介绍APP的“服务”页面,可以绑定自定义访问控制的脚本,一旦绑定...

    6e1a5baa9a6650cd1047d4a4b98b0548.gif

    【问题】系统管理中的角色权限管理,数据权限是干什么的?具体的应用场景说明下。

    【解答】配置数据权限控制的作用和操作方法

    有以下需求时,才需要配置数据权限控制:

    • 根据角色区分数据,即不同角色的用户查看到不同范围的数据。

    • 同一角色区分数据,即相同角色,根据默认的数据来源脚本的返回值,来区分查看的数据范围。

    图1 数据权限控制的应用场景c8676cfbf46cfe95fc43c20dfbcb4a39.png

    背景介绍

    APP的“服务”页面,可以绑定自定义访问控制的脚本,一旦绑定了某个脚本,下面的所有公共接口调用时,都会先进行该绑定的“统一过滤脚本”进行判断。该统一过滤脚本会把公共接口请求,发送给用户配置的自定义过滤脚本。用户的“自定义过滤脚本”可以决定是否授权通过。校验完数据权限,再进行业务权限校验,都通过校验后才返回接口的Response。

    若未配置,则不进行数据权限校验,只进行业务权限校验。

    图2 自定义访问控制0aff73d07a63956e47552e07a59df159.png

    开发自定义访问控制的脚本

    这里以Cube的Custom操作接口为例,既需要根据不同角色划分数据权限,也要根据相同角色不同操作员划分数据权限。基于该需求,为QueryCustom、DeleteCustom和UpdateCustom这3个接口,提供数据权限控制的配置流程。

    图3 数据权限校验流程d45aee65a532e30360fc5911a1a0a7f7.png

    1. 开发统一过滤脚本(CubeCommonFilter),该脚本用于绑定在“服务”的“公共接口”页面。

    脚本样例如下:

    import * as decimal from 'decimal';import * as sys from 'sys';import * as db from 'db';import * as context from 'context';export class Input {    @action.param({ type: "String", description: "application name" })    appName: string;    @action.param({ type: "String", description: "operation name of custom api" })    opName: string;    @action.param({ type: "String", description: "version of custom api" })    version: string;}export class Output {    @action.param({ type: "Number" })    result: decimal.Decimal;}const PASS = decimal.newWithExponent(1, 0)const BANNED = decimal.newWithExponent(0, 0)const FALLBACK = decimal.newWithExponent(-1, 0) //if return FALLBACK, the system will check permissions according to system permissionsexport class AccessCtrl {    @action.method({ input: "Input", output: "Output" })    run(input: Input): Output {        let output = new Output();        const records = sys.invokeSimpleBO('Permission', 'dataPermissionFilter',            { "appName": input.appName, "opName": input.opName, "version": input.version }, "0.1.0");        output.result = records['outputs']['result'];        return output;    }}

    2. 开发数据来源的脚本(CubeCustomerDefaultProvider),该脚本用于返回配置的权限控制的数据。

    import * as context from 'context';import * as db from 'db';import * as sys from 'sys';@useObject(['CampusCube__cubeGroupUsers__CST', 'CampusCube__cubeGroupCustomers__CST'])//入参定义export class ParamsInput {}//出参定义export class ParamsOutput {    @action.param({ type: "Output", required: true, isCollection: true, description: "" })    records: Output[];}export class Output {    @action.param({ type: "String", required: true, description: "选项id。" })    id: string;    @action.param({ type: "String", required: true, description: "权限定义表的唯一标识。" })    name: string;    @action.param({ type: "String", required: true, description: "标签。" })    label: string;    @action.param({ type: "String", required: false, description: "父节点的id。" })    parent: string;}export default function    query(input: ParamsInput): ParamsOutput {    let out = new ParamsOutput();    out.records = [];    const userId = context.getUserId();//获取当前登录的用户portalUserId    const ownerId = getOwnerId(userId);//获取roleGrant里面的ownerId    if (!ownerId) return out;//如果不存在该角色,则直接返回    //获取角色,确认是系统管理员还是普通操作员,若是系统管理员,则直接返回ALL,普通操作员再执行后续查表操作。    const roleNames = getRoleNamesByOwnerId(ownerId);    if (roleNames.indexOf('SM_Administrator') > -1) {//包含系统管理员权限,表示当前登录的人为系统管理员        let r = new Output();        r.id = 'ALL';        r.name = 'ALL';        r.label = 'ALL';        out.records.push(r);        return out;    }    if (roleNames.indexOf('SM_Operator') == -1) {//表示当前登录的人既不是系统管理员也不是普通操作员,直接返回空,表示无权限        return out;    }    //若是普通操作员,则查询普通操作员所属组织,判断其数据权限范围    const groupUserRecords = getRecords('CampusCube__cubeGroupUsers__CST', { 'CampusCube__userId__CST': userId });    if (!groupUserRecords || groupUserRecords.length == 0) return out;    let groudIdArrays = [];//获取当前登录用户所属组织的ID数组    groupUserRecords.forEach(item => {        groudIdArrays.push(item['CampusCube__groupId__CST']);    })    const groupCustomRecords = getRecords('CampusCube__cubeGroupCustomers__CST', { 'CampusCube__groupId__CST': groudIdArrays }, 'in');    if (!groupCustomRecords || groupCustomRecords.length == 0) return out;    //获取该登录用户下所能查看的客户id数组,作为出参    groupCustomRecords.forEach(item => {        let r = new Output();        r.id = item['CampusCube__customerId__CST'];        r.name = item['CampusCube__customerId__CST'];        r.label = item['CampusCube__customerId__CST'];        out.records.push(r);    })    return out;}//查询模型中的记录function getRecords(dbName: string, conditionObjects: object, operator?: string): db.Record[] {    let UserDb = db.object(dbName);    let conditions = [];    Object.keys(conditionObjects).forEach(key => {        conditions.push({            "field": key,            "operator": operator ? operator : "eq",            "value": conditionObjects[key]        });    });    let option = {        "conjunction": "AND",        "conditions": conditions    };    return (UserDb.queryByCondition(option) || []);}//通过context中的用户portalUserId,获取RoleGrant中的ownerIdfunction getOwnerId(userId: string): string {    const identityCondition = {        start: 0,        limit: 1,        condition: {            "portaluserId": {                "operator": "=",                "value": userId            },            "isReturnPortalUserId": false,            "isReturnRole": false,            "isReturnAccount": false        }    }    let indentityInfos = sys.invokeSimpleBO('CM_Identity', 'queryIdentity', identityCondition, '0.1.0');    if (!indentityInfos['outputs'] || !(indentityInfos['outputs']['identities'])        || !(indentityInfos['outputs']['identities'][0]) || !(indentityInfos['outputs']['identities'][0]['id'])) return "";    let ownerId = indentityInfos['outputs']['identities'][0]['id'];    if (!ownerId) return "";    return ownerId;}//获取角色名称function getRoleNamesByOwnerId(ownerId: string): string[] {    const queryCondition = {        start: 0,        limit: 100,        condition: {            "ownerId": {                "operator": "=",                "value": ownerId            },            "ownerType": {                "operator": "=",                "value": "Identity"            }        }    }    let indentityInfos = sys.invokeSimpleBO('Permission', 'queryPermissionGrant', queryCondition, '0.1.0');    if (!indentityInfos['outputs'] || !(indentityInfos['outputs']['owners']) || !(indentityInfos['outputs']['owners']['identityPermissionGrant'])        || indentityInfos['outputs']['owners']['identityPermissionGrant'].length == 0) return [];    let roleNames = [];    indentityInfos['outputs']['owners']['identityPermissionGrant'].forEach(item => {        if (item['role']) roleNames.push(item['role']['name']);    })    return roleNames;}

    3. 开发特定Restful API的自定义过滤器(QueryCustomFilter和DeleteAndUpdateCustomFilter)。

    a. QueryCustomFilter脚本样例如下,其中入参中的dataSource是默认必须存在的入参,出参是固定格式。

    import * as db from "db";import * as sys from 'sys';import * as decimal from 'decimal';import * as context from 'context';//入参定义export class ParamsInput {    dataSource: string[];}export class Output {    @action.param({ type: "Number" })    result: decimal.Decimal;}const PASS = decimal.newWithExponent(1, 0)const BANNED = decimal.newWithExponent(0, 0)const FALLBACK = decimal.newWithExponent(-1, 0) //if return FALLBACK, the system will check permissions according to system permissions//出参定义export class ParamsOutput { }//常量const OPERATOR_NAME = "queryCustom";export default function (input: ParamsInput): ParamsOutput {    let out = new ParamsOutput();    if (!input["dataSource"] && input["dataSource"].length == 0) {        out["result"] = BANNED;        return out;    }    let filterData = context.getExtDataFilters();    if (filterData && JSON.stringify(filterData) != '{}') {        filterData[OPERATOR_NAME] = input["dataSource"];        context.setExtDataFilters(filterData);    } else {        context.setExtDataFilters({ OPERATOR_NAME: input["dataSource"] });    }    out["result"] = FALLBACK;    return out;}

    b. DeleteAndUpdateCustomFilter脚本样例如下。其中入参中的dataSource是默认必须存在的入参,ID则是提取器,出参是固定格式。

    提取器:指的是需要提取请求中的部分入参,作为自定义过滤器的判断是否有权限的依据。

    import * as decimal from 'decimal';//入参定义export class ParamsInput {    dataSource: string[];    id: string;}export class Output {    @action.param({ type: "Number" })    result: decimal.Decimal;}const PASS = decimal.newWithExponent(1, 0)const BANNED = decimal.newWithExponent(0, 0)const FALLBACK = decimal.newWithExponent(-1, 0) //if return FALLBACK, the system will check permissions according to system permissions//出参定义export class ParamsOutput { }export default function (input: ParamsInput): ParamsOutput {    let out = new ParamsOutput();    if ((!input["dataSource"] && input["dataSource"].length == 0)) {        out["result"] = BANNED;        return out;    }    if (input["dataSource"].indexOf('ALL') > -1) {//包含provider传来的ALL,表示为系统管理员,直接放行        out["result"] = FALLBACK;        return out;    }    if (input['id'] && input["dataSource"].indexOf(input.id) > -1) {        out["result"] = FALLBACK;    } else {        out["result"] = BANNED;    }    return out;}

    4. 修改原来的QueryCustom脚本的查询逻辑。

    export class queryClientInfo {    @action.method({ input: 'ParamsInput', output: 'ParamsOutput' })    public run(input: ParamsInput): ParamsOutput {/*        此处省略原代码中的sql查询语句,以及一些相关的业务逻辑,QueryCustom脚本需要修改的原因是,要把QueryCustomFilter脚本存入的客户ID通过context.getExtDataFilters()取出来,拼接如原来的查询条件里面,当做条件之一去查询数据,达到数据过滤的效果;*/    /*以下是取出客户ID*/        const filterData = context.getExtDataFilters();        if (!filterData || JSON.stringify(filterData) == '{}'             || !(filterData['queryCustom'])             || filterData['queryCustom']['length'] == 0) {            out.count = 0;            out.data = [];            return out;        }        const queryCustomIdArray = filterData['queryCustom'];/****************************此处省略业务逻辑,业务的查询的sql查询的条件where后面的条件是拼接在whereSql变量上的,所以在原有的条件中加上以下代码,作为附加条件即可*******************************/        /*以下是在原有的查询条件中拼接上客户ID作为条件*/        if (queryCustomIdArray.length > 0 && queryCustomIdArray.indexOf('ALL') == -1) {            whereSql += " and SmartCampus__CubeCustomer__CST.id in (";            for (let i = 0; i < queryCustomIdArray.length; i++) {                if (i == queryCustomIdArray.length - 1) {                    whereSql += "?)";                } else {                    whereSql += "?,";                }                params.push(queryCustomIdArray[i]);            }        }    }}

    权限BO中配置数据权限

    1. 登录AppEngine开发平台。

    2. 进入业务APP的开发界面,单击左下角的“服务”,绑定统一过滤脚本后单击“启用”。

        该示例中的脚本选择1中开发的CubeCommonFilter。

    图4 自定义访问控制64688e1d436e6519cbffcd6e86b8fdd6.png

    3. 依次选择“管理 > 应用管理 > BO配置 > Permissions”,进入权限管理页面,选择“数据权限管理”后单击“+”添加数据权限。

    图5 进入数据权限管理页面8037130e3194bedc4e5164f2fc48f78d.png

    表1 数据权限定义

    参数名称

    参数说明

    数据权限定义名称

    自定义名称

    数据权限定义标签

    自定义标签

    默认数据范围来源

    用户需要提前开发一个脚本,定义返回的权限控制的数据范围列表。

    该示例中选择2中开发的脚本“CubeCustomerDefaultProvider”。

    自定义数据范围来源

    用户自定义的数据范围来源。

    该示例不需要,与“默认数据范围来源”一样选择“CubeCustomerDefaultProvider”脚本。

    数据权限定义描述

    自定义描述

    4. 添加完数据权限后,不要单击“创建”,先选择“校验器配置”后面的“添加”,进入“创建校验器”界面。

    图6 创建校验器c717eb314326dbdd0a2d2e81560f63b2.png

    表2 数据权限定义

    参数名称

    参数说明

    工程名称

    选择需要使用数据权限控制的业务APP,或者BO。

    工程接口名称

    选择需要校验的接口,例如该示例中的“UpdateCustom”接口。

    数据范围过滤器脚本

    接口对应的过滤脚本,该示例中“UpdateCustom”接口选择3.b中开发的脚本“DeleteAndUpdateCustomFilter”。

    提取器配置

    如果需要提取入参传给过滤脚本,则需要配置提取器。

    • “字段名称”为需要提取的字段。

    • “字段值”为过滤脚本中用于提取入参值的字段。

    5. 按上一步的步骤,配置业务APP其它接口的校验器。例如:

    • DeleteCustom接口,选择过滤脚本“DeleteAndUpdateCustomFilter”。

    • QueryCustom接口,选择3.a中开发的过滤脚本“QueryCustomFilter”。

    6. 所有接口的校验器配置完成后,单击“创建”,使得其变为下图的“修改”样式,即表示数据权限成功创建。

    图7 数据权限创建成功

    22efbca8a517ac12c032a886ad11a581.png

    7. 回到“权限管理”页面,绑定权限与数据权限的关联关系。

    图8 绑定权限与数据权限的关联关系

    a3351ff33152de17bc0ff95179d4f6b8.png

    绑定角色权限与数据权限的关联关系

    1. 登录智慧园区运营中心IOC,选择“系统管理 > 角色权限管理”,进入角色权限管理页面。

    2. 绑定角色权限与数据权限的关联关系。

    图9 绑定角色权限与数据权限1b9d8dbb755fa1d64e6774a1a386d7cb.png

    3. 使用相同角色的2个不同操作员登录IOC,使用系统管理员登录IOC,验证是3个界面是否展示不同的数据。

    -END-

    cb881fe3895797f4742193870793321a.png

    更多相关文章

    • 2020华为&兴海物联智慧社区现场会,欢迎莅临指导!

    • 共创行业新价值!华为全联接2020如约而至

    • 华为中国生态之行2020河北峰会,智慧园区分论坛等你!

    • 《智慧园区设计标准》第一次评审会暨第二次工作会议成功召开

    • 智慧园区论坛精华帖第六期:共建开放生态,使能万物互联的智能世界

    • 智慧园区南向认证合作伙伴及设备清单

    • 《未来智慧园区白皮书》已发布,附下载链接!

    • 敲黑板 | 智慧园区最强开发者手册

    • 华为智慧社区:科技赋能,给您温暖的家!

    15e968b7ed5136851ae0a40eb0d78a40.png

    展开全文
  • 华为云数据复制服务DRS推出业内首家用户权限迁移功能,一键式帮您完成用户权限和密码的迁移,让您省时,省心又省力。 下面通过“云图说”,来让您快速了解该功能: 点击“了解更多”,数据复制服务DRS等着您! .....

    业界主流的云数据库迁移方案中,无法完全继承源数据库的权限体系。

    要同时迁移几套数据库,账号繁多,密码又由不同人维护,来回沟通,费时费力效率低。

    华为云数据复制服务DRS推出业内首家用户权限迁移功能,一键式帮您完成用户权限和密码的迁移,让您省时,省心又省力。

    下面通过“云图说”,来让您快速了解该功能:

    点击“了解更多”,数据复制服务DRS等着您!

    展开全文
  • restful中数据权限加密方式有很多种,特别是针对于request json的方式加密,这里详细介绍了SOA中针对于get、post数据加密方式,保证数据传输中的安全性: Java代码 到此结束!! 我这边会将近期研发的spring ...
  • 老项目如何改造数据权限系统(一) 一、起源 ...3、数据权限、用户中心可以单独开发成两个服务、为什么要将数据权限配置分开、是要尽最大的程度解耦。以后其他项目的复 用性、将业务和服务分开 4
  • 最近完成了初版的数据逻辑...1.产品定位: 数据克隆是高效,安全的从通过从线上指定数据库/表克隆数据,从而快速构建虚拟环境,提供更高效的数据交付服务。从效率上可以支持业务自助提取数据,分钟级快速构建环境,...
  • 这是《数据平台服务化建设》系列的第 2 篇,预计会写 10 篇左右。通过这个系列,我希望和大家分享下数据平台怎么去做服务化建设。扫描文末二维码,关注公众号,不再错过精彩。也欢迎转发朋友圈...
  • APPNAME_NOT_APPLY(2005,"当前应用没有权限访问此服务,请联系管理员进行服务申请."); // 成员变量 privateint code;// 状态码 private String message;// 返回消息 // 构造方法 private ...
  • 而本章要讲的是权限控制的另一个层面数据权限,意思是控制可访问数据资源的数量。举个例子:有一批业务员跟进全国的销售订单。他们被按城市进行划分,一个业务员跟进3个城市的订单,为了保护公司的业务数据不能被...
  • url进行加密处理来保护服务器上的数据我认为,保护服务器端的数据,有这么几个关键点: 不能对使用体验产生影响,这就排除掉了诸如每次接口调用都要求用户输入验证码这样的做法 接口调用的网络交互需要无规律可循,...
  • 原标题:华为云数据湖探索服务DLI,精细化保障企业大数据安全随着企业业务的不断发展,企业大数据资产在企业辅助决策、用户画像、推荐系统等诸多业务流程中扮演着越来越重要的作用,如何保证企业大数据在满足各业务...
  • 通用RBAC权限设计及其数据权限和分库分表 支持服务限流、动态路由、灰度发布、 支持常见登录方式, 多系统SSO登录 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的RBAC权限管理系统 提供对常见容器化支持 ...
  • 大数据平台数据权限管理设计

    千次阅读 2020-02-25 15:22:43
    对于数据开发者,主要通过分配IAM控制AWS的操作权限;对于team的所有人都是通过分配aws的ak,sk在本地进行操作赋权;随着数据平台的不断的丰富和完善,需要在各组件之上做认证,鉴权和审计等管理,数...
  • 而本章要讲的是权限控制的另一个层面数据权限,意思是控制可访问数据资源的数量。 举个例子: 有一批业务员跟进全国的销售订单。他们被按城市进行划分,一个业务员跟进3个城市的订单,为了保护公司的业务数据不能被...
  • InfluxDB修改默认的Data目录后,因权限问题,服务无法正常运行。以下是具体的分析测试过程。 配置文件为 /etc/influxdb/influxdb.conf,关于数据存放的默认配置如下: 调整后的配置: 启动influxdb后,查看...
  • 去年做了一个数据仓库的项目,其中涉及到了CUBE数据权限的控制。在网上找这方面的资料,找到一个[BI] 通用数据权限控制解决方案的实现(二):Cube中的角色设置与数据权限控制。根据这个大牛的思路,做完之后...
  • 怎么打开OPENDATASOURCE权限(不同服务器数据库之间的数据操作)    exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址'  exec sp_addlinkedsrvlogin 'ITSV' , 'false' , ...
  • arcgis server发布的切片服务,后期对切片数据单独进行更新。因为管理员权限问题,导致无法更新。使用文件粉碎器也无法进行清除。尝试过添加everyone用户,也无法解决。 右键文件夹,选择“属性”,选择"安全",...
  • 一、服务资源授权设置 服务资源授权:服务授权后,才能访问 1、将公钥放到服务资源(shop-service-user) 2、添加解析令牌的依赖 <!--解析令牌--> <dependency> <groupId>org.spring...
  • 数据统一之后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效服务。目录1.中台需要解决的问题2.分析业务场景3.功能架构4.技术架构5.总结当今世界随着互联网、物联网和云计算技术的迅猛发展,...
  • LINUX下,数据库DATA文件,从一服务器转移到另一服务器,可能出现看不到数据表问题。 解决方法: 查看原生mysql数据库权限 把项目目录和mysql目录权限更改成原生mysql数据库权限或更高等级的权限
  • 本文旨在解决在SpringCloud基础权限框架搭建(1)-Zuul整合SpringSecurityOAuth2(JWT)+Turbine中的遗留问题(内部服务间的访问权鉴问题),添加微服务访问用例,整合配置中心(SpringCloudConfig)、消息总线(Spring...
  • 其中YOUR_APP_ID就是你的APPID, YOUR_URL就是你应用程序的URL,Canvas程序就填Canvas的URI, scope就是请求的权限. 这个界面进去就是跟国内的微博应用一样了,是一个申请用户授权的页面,用户点击授权后,facebook会...
  • restful中数据权限加密方式有很多种,特别是针对于request json的方式加密,这里详细介绍了SOA中针对于get、post数据加密方式,保证数据传输中的安全性: @Component("dataSignInterceptor") public class ...
  • 权限管理与数据恢复

    2019-08-06 16:44:26
    实验要求:为新创建的数据库用户分配权限,使其可以访问数据库中的表。三种备份类型,备份数据并恢复数据。掌握即时点恢复于故障点恢复。 一、SQL Server 权限设置 SQL Server 的安全机制: 客户机的安全机制 服务器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,848
精华内容 5,939
关键字:

数据权限服务