• [AX]AX2012 Table的AOSAuthorization 属性


    Table的AOSAuthorization有以下几个枚举值可选择:

    • None
    • CreateDelete
    • UpdateDelete
    • CreateUpdateDelete
    • CreateReadUpdateDelete

    假设一个表的AOSAuthorization 属性被设置为CreateDelete,AOS值在确认用户有合适的权限时才执行Create和Delete操作,但是不会检查Update和Read操作。这个属性默认设置为None。在AOS通过执行表的以下方法检查操作:

    • aosValidateDelete
    • aosValidateInsert
    • aosValidateRead
    • aosValidateUpdate

    可以在表上重载这些方法,AOS对每条纪录执行这些方法,所以会影响运行性能。虽然MSDN讲在AOSAuthorization设为None不做检查,但是测试发现即使把AOSAuthorization设为None,这些方法也会被调用,可以调用xRecord.skipAOSValidation(true)来忽略检查,一个表只需要调用一次,所以能在一定程度上减轻对性能的影响:

    server static void JobPermAssertSkip(Args _args)
    {
        AssetTable tabAt;
        SkipAOSValidationPermission perm;
        ;
        ttsbegin;
        perm = new SkipAOSValidationPermission();
        perm.assert();
        tabAt.skipAosValidation(true);
        update_recordset tabAt
            setting MaintenanceInfo3 = "Useful information."
            where tabAt.AssetId == "goodvalue";
        ttscommit;
    }

    上面的Job虽然被放在server上运行,但是在我的测试中直接运行仍然会得到“Request for the permission of type 'SkipAOSValidationPermission' failed.”的错误,放在Class的server static方法中却是能成功运行的,MSDN的说明是SKipAOSValidationPermission.assert()需要在同一个tier一般在server tier运行,不是太明白这个解释,总之放在Class的server static方法里就没有问题了,也就是只能在server tier调用skipAOSValidation()。在调用了skipAOSValidation(true)后,表的aosValidateXXX方法就不再被调用了。

    视图也有AOSAuthorization属性,它的检查只涉及到视图,和其下的Table的设置没有关系。另外如果从secured server method或者service operation操作表,表的AOSAuthorization属性被忽略,权限检查始终被执行。

    详见http://msdn.microsoft.com/EN-US/library/bb278259

     

  • 相关阅读:
    Tomcat 7 自动加载类及检测文件变动原理
    ElasticSearch查询
    ElasticSearch集群的基本原理
    ElasticSearch基础
    hbase时间不同步问题引起的bug
    IDEA运行异常java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/Function
    spark任务提交之SparkLauncher
    spark调优(二)-Apache Spark 内存管理详解
    spark调优(一)-开发调优,数据倾斜,shuffle调优
    spark内核源码深度剖析(1)--Spark内核架构深度剖析
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/2661930.html
Copyright © 2020-2023  润新知