Измените r_accessor_permit группы, назначенной ACL в Documentum

Я хочу использовать DFCs, чтобы изменить значение r_accessor_permit группы, назначенной acl:

1 -> сначала я выбрал ACL под названием "fme"

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 для имени ‘grp_corp_lgl_sateri_hk’ в ACL ‘fme’».

Я совершенно уверен, что не сделал ни одной опечатки. Но я не могу найти причину, по которой я сталкиваюсь с такой ошибкой. Любая идея, где я делаю свою ошибку?

===> Обновление вопроса После того, как я понял, в чем была моя ошибка, основанная на комментариях, я предпринял еще одну попытку следующим образом:

    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();
        }

Но я все еще продолжаю получать ошибки, и я действительно знаю, почему? Есть идеи ?


person Danial Kosarifa    schedule 09.11.2016    source источник


Ответы (1)


Вы ошиблись, когда подумали, что извлечение ACL из репозитория выполняется методом IDfSession.newObject(<type_name>). Этот метод служит для создания новых объектов в репозитории. Вместо этого вы должны сделать:

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

or

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.

person Miki    schedule 09.11.2016
comment
IDfACL acl = sess.getACL(myACL, <your ACL's domain name>); - это строка, которая все еще продолжает выдавать мне ошибку. Даже если я попытался создать новое имя списка управления доступом и дать ему нужные разрешения, а также обновить имя списка управления доступом для объектов, использующих его, я все еще не могу использовать функцию acl.destroy(); для удаления предыдущего. Есть идеи, почему? XD Я обновил вопрос для лучшей справки;) - person Danial Kosarifa; 10.11.2016
comment
как только я попытаюсь распечатать переменную acl, чтобы увидеть, хранится ли в ней какой-либо объект, результат будет нулевым. Что наводит на мысль, что, скорее всего, не работает выборка acl, но почему? первый атрибут getACL() должен быть object_name, а второй должен быть владельцем, верно? и он существует в таблице объектов dm_acl - person Danial Kosarifa; 10.11.2016
comment
первый атрибут getACL() должен быть object_name, а второй должен быть владельцем, верно?. Нет нет нет. Я же вам написал, что второй атрибут --> доменное имя. Это может быть владелец, но это не обязательно. Используйте DA или что-то еще, что вы используете, и убедитесь, что вы используете правильный домен. Если вы не уверены, вставьте скриншот в свой вопрос, и я скажу вам. - person Miki; 10.11.2016
comment
кстати, почему бы вам не использовать подход с методом getObjectByQualification, чтобы проверить, делаете ли вы что-то не так с доменным именем? - person Miki; 10.11.2016
comment
О, я нашел, что было не так. В таблице объектов dm_acl нет столбца с именем acl_name, вместо этого используется имя object_name, и теперь он работает нормально;) - person Danial Kosarifa; 10.11.2016
comment
пожалуйста, поправьте меня, если я ошибаюсь, насколько я понимаю, в dm_folder у вас есть 2 столбца с именами acl_name и acl_domain, но в dm_acl у нас нет ни одного из них, вместо этого у нас есть object_name и acl_owner, но они оба содержат одинаковые значения соответственно, но значение по умолчанию для acl_owner — это dmadmin или, по сути, тот, кто использует текущий сеанс, если я не упомяну иное!? - person Danial Kosarifa; 10.11.2016
comment
Вы правы, говоря об именах атрибутов в типах dm_folder и dm_acl. Однако атрибуты acl_name и acl_domain в dm_sysobject (супертип dm_folder с атрибутом acl_name) просто содержат значения, которые когда-то были установлены. нет значения по умолчанию для acl_owner, более того, ему действительно не нужно хранить информацию о его владельце, вы можете изменить его позже -› например. Однако, как вы предполагаете, если вы создаете ACL неявно, он будет содержать имя пользователя владельца. - person Miki; 10.11.2016