我想使用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]错误:“没有ACE匹配名称 ACL'fme'中的'grp_corp_lgl_sateri_hk'。“
我很确定我没有输入错误。但我找不到我面临这样的错误的原因。知道我在哪里弄错了吗?
===>更新问题 在我意识到我的错误是基于评论后,我给了它另一个尝试如下:
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();
}
但我仍然一直在犯错,我真的知道为什么?任何的想法 ?
答案 0 :(得分: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();
由于您创建了新对象,因此您在此时没有名称为grp_corp_lgl_sateri_hk
的访问者是合乎逻辑的。