zoukankan      html  css  js  c++  java
  • [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

     

  • 相关阅读:
    伐木工和森林的故事(一)
    EclipsePDT PHP的开发环境配置
    奇怪的using
    [团队开发]SERVER2008下无法安装VS2008 SP1 和 TFS2008 SP1补丁
    写在七夕
    一点点的松懈,就可以毁掉自己!
    2008,到今天我不后悔
    细节决定成败,注意的事情需要做到,而不是听完了当耳边风
    正视差距,展望2008!
    ZendStudio5.5调式环境配置
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/2661930.html
Copyright © 2011-2022 走看看