zoukankan      html  css  js  c++  java
  • 总账数据访问安全性控制(5)

    本文介绍在客户化开发的程序中需要考虑总账数据访问安全性的控制

    一、Form界面开发

    如果Form界面中需要引用账户组合,同时希望账户组合受到数据安全性控制,需要增加如下的工作:

    1. 添加GLCORE.pll库文件到Form中
    2. 在账户组合字段的WHEN-VALIDATE-ITEM触发器中添加如下的代码来验证权限

    gl_flexfield. validate(ledger_id NUMBER, flexmode VARCHAR2, flexvalue VARCHAR2, alevel VARCHAR2, full_validation BOOLEAN, edate DATE)

    这个过程验证如果失败后,过程中会抛出这个消息:GLCORE_NO_ACCESS

    ledger_id:分类账ID
    flexmode:账户组合模式,指弹性域包括:所有段组合,账户段,平衡段和管理段
                      对应可以提供的值:gl_flexfield.ALL_SEGMENTS, gl_flexfield.ACCOUNT, gl_flexfield.BALANCING, gl_flexfield.MANAGEMENT
    flexvalue
    :账户的段值,根据账户组合模式不同提供不同的值
    alevel:数据访问权限级别:完全、写、只读和无权限。
                 对应的值:gl_access_set.FULL_ACCESS, gl_access_set.WRITE_ACCESS, gl_access_set.READ_ONLY_ACCESS, gl_access_set.NO_ACCESS
    full_validation
    :段值是否需要验证
    edate:验证段值的日期,此值为null时跳过值的验证

    下面是一个实际的代码例子:

    gl_flexfield.validate(:HEADER.ledger_id,
             gl_flexfield.ALL_SEGMENTS, :LINES.accounting_flexfield,
             gl_access_set.WRITE_ACCESS, TRUE, :HEADER.default_effective_date);

    二、SQL编写

    如果希望编写的SQL执行结果受到数据安全性的控制,需要特别添加限制。

    1)凭证相关

    如果在程序中希望SQL取出的凭证数据受到数据安全性的控制,那需要连接数据库表

    GL_JE_SEGMENT_VALUES来过滤数据,主要的字段:

    je_header_id:凭证头ID
    segment_type_code:段值类型,有B代表平衡段;M代表管理段
    segment_value:段值

    表关系图:

     gl_access_set_je_erd

    同时检查数据安全性设置表GL_ACCESS_SET_ASSIGNMENTS中的设置:
    access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
    ledger_id
    segment_value
    access_privilege_code

    下面是一个使用的例子:

    SELECT *
      FROM gl_je_batches_headers_v
    WHERE chart_of_accounts_id = 101
       AND period_set_name = ‘Accounting’
       AND accounted_period_type = ‘Month’
       AND (gl_je_batches_headers_v.ledger_id IN
           (SELECT acc.ledger_id
               FROM gl_access_set_ledgers acc
              WHERE acc.access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)) AND EXISTS
            (SELECT ‘readable line’
               FROM gl_je_segment_values sv, gl_access_set_assignments acc
              WHERE sv.je_header_id = gl_je_batches_headers_v.je_header_id
                AND sv.segment_type_code = ‘B’
                AND acc.access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
                AND acc.ledger_id = gl_je_batches_headers_v.ledger_id
                AND acc.segment_value = sv.segment_value))
       AND (je_batch_id = header_je_batch_id_qry + 0)
       AND (header_name = ’06-NOV-02 Project Mfg To Consolidation USD’)
    ORDER BY batch_name, period_name

    2)分类帐相关

    如果在程序中希望SQL取出的分类账数据受到数据安全性的控制,那需要连接数据库表
    XLA_AE_SEGMENT_VALUES

    ae_header_id:分类账头ID
    segment_type_code:段值类型,有B代表平衡段;M代表管理段
    segment_value:段值

    表关系图:

     gl_access_set_xla_erd

    同时检查数据安全性设置表GL_ACCESS_SET_ASSIGNMENTS中的设置:
    access_set_id = fnd_profile.value(‘GL_ACCESS_SET_ID’)
    ledger_id
    segment_value
    access_privilege_code

    一个使用的例子:

    SELECT *
      FROM xla_ae_headers xah
    WHERE (ledger_id IN
           (SELECT acc.ledger_id
               FROM gl_access_set_ledgers acc
              WHERE acc.access_set_id = fnd_profile.VALUE(‘GL_ACCESS_SET_ID’)) AND
           EXISTS
            (SELECT ‘readable line’
               FROM xla_ae_segment_values sv, gl_access_set_assignments acc
              WHERE sv.ae_header_id = xah.ae_header_id
                AND sv.segment_type_code = ‘B’
                AND acc.access_set_id = fnd_profile.VALUE(‘GL_ACCESS_SET_ID’)
                AND acc.ledger_id = xah.ledger_id
                AND acc.segment_value = sv.segment_value))

    三、PL/SQL编写

    如果在客户化编写的PL/SQL程序中需要考虑总账数据安全性控制,使用数据库包GL_FORMSINFO中所提供的过程与方法,下面是它的声明:

    SQL> descr GL_FORMSINFO;
    Element                   Type     
    ————————- ———
    FULL_ACCESS               CONSTANT 
    WRITE_ACCESS              CONSTANT 
    READ_ACCESS               CONSTANT 
    NO_ACCESS                 CONSTANT 
    GET_COA_INFO              PROCEDURE
    GET_ACCESS_INFO           PROCEDURE
    CHECK_ACCESS              FUNCTION 
    GET_LEDGER_TYPE           FUNCTION 
    GET_DEFAULT_LEDGER        FUNCTION 
    HAS_SINGLE_LEDGER         FUNCTION 
    WRITE_ANY_LEDGER          FUNCTION 
    GET_LEDGER_INFO           PROCEDURE
    VALID_BSV                 FUNCTION 
    VALID_MSV                 FUNCTION 
    MULTI_ORG                 FUNCTION 
    INSTALL_INFO              FUNCTION 
    GET_IEA_INFO              PROCEDURE
    GET_USAGE_INFO            PROCEDURE
    GET_BUSINESS_DAYS_PATTERN PROCEDURE
    IEA_DISABLED_SUBSIDIARY   FUNCTION 
    GET_INDUSTRY_MESSAGE      FUNCTION 
    SESSION_ID                FUNCTION 
    SERIAL_ID                 FUNCTION 

    程序中使用 CHECK_ACCESS方法即可以检查数据访问安全性。

    四、凭证导入

    如果客户化程序需要通过总账接口来导入凭证,那需要注意导入凭证受到数据访问权限设置的控制,因此插入到GL_INTERFACE中的数据要充分考虑这点,一般可以采取如下方式:

    1. 如果运行导入程序的职责不具备完全访问分类账的权限,那可以包装一下导入程序,在调用导入程序之前进行数据的过滤
    2. 如果不希望受到数据访问权限的限制,也可以专门设置一个完整权限访问的职责,用它来进行凭证的导入

    至此整个“总账数据访问安全性控制”系列已全部结束,下面是系列文章的链接:

  • 相关阅读:
    Dapper缓冲的真正含义
    css字体变瘦,窄
    打印request的信息
    部分浏览器cookie无法传输cookie,谷歌51-66版本
    Vue点击div以外的地方使div消失
    MybatisPlus模糊查询(like),查询不到中文,却可以查询到英文和数字的一种解决办法
    看起来很唬人,然而却简单实用的CAP理论
    做业务系统研发如何做到认真负责?
    聊聊关于创业公司招聘技术负责人
    [系列] Go
  • 原文地址:https://www.cnblogs.com/liuweicong39/p/2771101.html
Copyright © 2011-2022 走看看