0

我想使用DFCs以更改分配给 acl 的组的 r_accessor_permit 的值:

1 - >首先我选择了一个名为“fme”的ACL

2->然后我编写了以下 DQL 以获取分配给它的组:

select r_accossor_name from dm_acl where object_name = 'fme'

3 - >我收到了一个组列表,我复制粘贴了其中一个,称为:grp_corp_lgl_sateri_hk

然后我写了以下内容:

public void changeGroupPermission (){
    try{
        String myAcl = "fme";
        IDfACL acl = (IDfACL)_session.newObject("dm_acl");
        acl.setString("object_name", myAcl);

        acl.revoke("grp_corp_lgl_sateri_hk","execute_proc");
        acl.save();
    }catch(Exception E){
        System.out.println(E.getLocalizedMessage());
    }
    }

我运行它,结果是以下错误:

[DM_ACL_E_NOMATCH] 错误:“ACL 'fme' 中没有与名称 'grp_corp_lgl_sateri_hk' 匹配的 ACE。”

我很确定我没有犯任何打字错误。但我找不到我面临这种错误的原因。知道我在哪里犯错了吗?

===>更新问题在我意识到我的错误是基于评论之后,我再次尝试如下:

    try{
            String aclName = "fme";
            IDfACL acl = _session.getACL(aclName, "LEXOPEDIA");
            acl.destroy();
//or 
            acl.revoke("grp_sateri_prc_lgl_acc2", "change_location");
            acl.save();
        }catch(Exception E){
            E.printStackTrace();
        }

但我仍然不断出错,我真的知道为什么?任何想法 ?

4

1 回答 1

1

IDfSession.newObject(<type_name>)当您认为从存储库中检索 ACL 是使用方法完成时,您犯了错误。此方法用于在存储库中创建新对象。相反,您应该这样做:

IDfACL acl = sess.getObjectByQualification("dm_acl where object_name='" + myAcl + "'");
acl.revoke("grp_corp_lgl_sateri_hk","execute_proc");
acl.save();

或者

IDfACL acl = sess.getACL(myACL, <your ACL's domain name>); 
// domain name could be "DM_DBO" if your ACL is available for everyone in repository
acl.revoke("grp_corp_lgl_sateri_hk","execute_proc");
acl.save();

由于您创建了新对象,因此您当时没有带有 name 的访问器是合乎逻辑的grp_corp_lgl_sateri_hk

于 2016-11-09T09:55:06.693 回答