Administration groupes Documentum

De EjnTricks
Révision de 1 mars 2016 à 14:54 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Lors d'un projet, des administrateurs fonctionnels ont été mis en place afin de pouvoir gérer les habilitations des utilisateurs dans Documentum Administrator. Malgré la lecture de la documentation, les administrateurs ne pouvaient modifier un ensemble de groupes. Aucun message d'erreur n'était affiché, mais l'exécution en API donnait l'erreur suivante.

[DM_GROUP_E_NEED_SUPER_USER_PRIV]error:  "The current user (Alex Aminateur) needs to have superuser privilege to save the group object."

Après une bonne journée de recherche, il s'est avéré qu'il y a une astuce pas très clair dans la documentation. Cet article se propose de présenter la gestion des groupes, et a été réalisé avec une version 7.1 du Content Server.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Rappel des droits

Dans un premier, il faut voir ce qu'indique la documentation.

Dans la document Adminstration and Configuration Guide, chapitre User Management → Groups, il y a le résumé suivant en fonction des privilèges d'un utilisateur.

Privilege Create Modify Delete
Create Group

Can create group or assign ownership to a group to which the user belongs.

Can add or delete members and assign ownership to a group to which the user belongs.

Can delete groups the user owns, including groups where a group is owner and the user is a member of the group.

System administrator

Can create group or assign ownership to a group to which the user belongs.

Can update the group the system administrator owns, including groups where a group is owner and the system administrator is a member of the group.

Can delete groups the system administrator owns, including groups where a group is owner and the system administrator is a member of the group.

Superuser

Can create a group and assign ownership to a different user or group.

Can update group administrator, owner, or members of a group.

Can delete any group.


Dans le sous paragraphe Creating, viewing, or modify groups, les propriétés d'un groupe sont présentées. Deux notions semblent importantes.

Field label Value
Owner

The name of a repository user who has the Create Group privilege and who owns this group.

If you are a superuser, you can select the owner. Otherwise, you can set this to a group of which you are a member.

Administrator

Specifies a user or group, in addition to a superuser or the group owner, who can modify the group. If this is null, only a superuser and the group owner can modify the group.

Only a superuser and the group owner can change the administrator of a group


Enfin, dans la documentation System Object Reference, la description des propriétés de l'objet dm_group confirme les informations précédentes.

Property Datatype Single or repeating Description
group_admin string(255) S The name of a user or group who

can modify the group.

owner_name string(255) S The name of the user or group who

owns the group.


A la lecture de ces documentations, nous pouvons imaginer que les personnes autorisées à modifier les groupes sont :

  • Les super user, ce qui est normal car ils peuvent absolument tout faire;
  • Les system administrator à condition d'être le propriétaire du groupe, ou d'être dans le groupe d'administration du groupe à modifier;
  • Avec privilège de création groupe, à condition de n'ajouter que les groupes auquel le compte appartient.


Warning-icon.png Jeu de tests via API

User-icon.png Utilisateurs

Pour les besoins du tests, deux utilisateurs sont créés.

create,c,dm_user
set,c,l,user_name
user 1
set,c,l,user_os_name
user1
set,c,l,user_privileges
0
set,c,l,user_source
inline password
set,c,l,user_password
password
set,c,l,client_capability
1
set,c,l,user_login_name
user1
set,c,l,default_folder
/Temp
save,c,l
create,c,dm_user
set,c,l,user_name
user 2
set,c,l,user_os_name
user2
set,c,l,user_privileges
0
set,c,l,user_source
inline password
set,c,l,user_password
password
set,c,l,client_capability
1
set,c,l,user_login_name
user2
set,c,l,default_folder
/Temp
save,c,l
create,c,dm_user
set,c,l,user_name
user 3
set,c,l,user_os_name
user3
set,c,l,user_privileges
8
set,c,l,user_source
inline password
set,c,l,user_password
password
set,c,l,client_capability
1
set,c,l,user_login_name
user3
set,c,l,default_folder
/Temp
save,c,l

User-group-icon.png Groupes

De la même façons, trois groupes sont créés.

create,c,dm_group
set,c,l,group_name
group user 1
set,c,l,group_admin
admingroup
set,c,l,owner_name
dm_dbo
set,c,l,is_private
F
set,c,l,group_class
group
set,c,l,is_protected
F
append,c,l,users_names
user 1
save,c,l


create,c,dm_group
set,c,l,group_name
group user 2
set,c,l,group_admin
admingroup
set,c,l,owner_name
dm_dbo
set,c,l,is_private
F
set,c,l,group_class
group
set,c,l,is_protected
F
append,c,l,users_names
user 2
save,c,l


create,c,dm_group
set,c,l,group_name
group all users
set,c,l,group_admin
admingroup
set,c,l,owner_name
dm_dbo
set,c,l,is_private
F
set,c,l,group_class
group
set,c,l,is_protected
F
append,c,l,users_names
user 1
append,c,l,users_names
user 2
save,c,l


Run-icon.png Exécutions

Tool-box.png Groupe administration

Ce test va démontrer l'utilisation du groupe d'administration sur un groupe. Dans le jeu d'essai, le groupe d'administration est admingroup.

Le premier test de modification du groupe group user 2 avec une session sous le groupe user1, le résultat est le suivant.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
ERROR:
[DM_GROUP_E_INSUFFICIENT_PRIVILEGE]error:  "The current user (user 1) has insufficient privileges to save or destroy the group user 1 group object."

En modification le groupe group user 1 pour spécifier group all users en tant que groupe d'administration.

retrieve,c,dm_group where group_name = 'group user 1'
set,c,l,group_admin
group all users
save,c,l

Les deux utilisateurs user 1 et user 2 peuvent alors modifier le groupe group user 1. Avec le compte user 1

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
Ok

Avec le compte user 2

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> remove,c,l,groups_names[0]
...
Ok
API> save,c,l
...
Ok

Examples-icon.png En conclusion, un compte, qui fait parti du groupe d'administration d'un groupe, peut modifier le groupe. Et cela quelque soit ses privilèges.


Icon File Owner.png Propriétaire

Ce test va démontrer l'utilisation du propriétaire d'un groupe. Le groupe d'administration est remis à admingroup.

retrieve,c,dm_group where group_name = 'group user 1'
set,c,l,group_admin
admingroup
save,c,l

Puis le propriétaire du groupe group user 1 est spécifié à user 2.

retrieve,c,dm_group where group_name = 'group user 1'
set,c,l,group_admin
admingroup
save,c,l

En se connectant avec le compte user 1, la modification est impossible.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
ERROR:
[DM_GROUP_E_INSUFFICIENT_PRIVILEGE]error:  "The current user (user 1) has insufficient privileges to save or destroy the group user 1 group object."

Par contre, en se connectant avec le compte user 2, la modification est possible.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
Ok

Le compte user 3, avec privilège System Administrator, peut modifier sans problème les groupes.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> remove,c,l,groups_names[0]
...
Ok
API> save,c,l
...
Ok

Examples-icon.png En conclusion, un compte qui est propriétaire d'un groupe peut modifier le groupe. Et cela quelque soit ses privilèges. Cela est également le cas, si l'utilisateur fait parti du groupe qui est propriétaire du groupe. En modifiant, le groupe group user 1 en mettant group user 2 comme propriétaire.

retrieve,c,dm_group where group_name = 'group user 1'
set,c,l,owner_name
group user 2
save,c,l

L'utilisateur user 2 faisant parti du groupe group user 2, il peut modifier le groupe group user 1.


Icon-database-process.png Modification sans groupe d'administration

Sur cet exemple, la modification va porter sur des groupes qui n'ont aucun groupe d'administration. Pour cela, les groupes du jeu de tests sont modifiés avec la requête DQL suivante.

update dm_group object set group_admin = ' ' where group_name in ('group all users', 'group user 1', 'group user 2')

Le propriétaire des groupes reste dm_dbo.

Et surprise, les comptes user 1 et user 2 peuvent modifier les groupes.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
Ok

Le compte user 3, avec privilège System Administrator, peut modifier sans problème les groupes.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> remove,c,l,groups_names[0]
...
Ok
API> save,c,l
...
Ok

Warning-icon.png Donc en conclusion, attention car n'importe qui peut modifier les groupes. Les comptes n'ont aucun privilège particulier, ne sont pas propriétaire, mais peuvent modifier la composition.


Icon File Owner.png cas particulier

Cet article a été motivé pour un cas d'utilisation rencontré chez un client. Malgré que les comptes aient le privilèges System Administrator, il était impossible d'ajouter / supprimer des utilisateurs / groupes dans des groupes.

Le groupe user group 1 est ajouté, avec un compte Superuser, au groupe dm_superusers_dynamic.

retrieve,c,dm_group where group_name = 'dm_superusers_dynamic'
append,c,l,groups_names
group user 1
save,c,l

Avec le compte user 1, la modification de group user 1 est impossible.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
ERROR:
[DM_GROUP_E_INSUFFICIENT_PRIVILEGE]error:  "The current user (user 1) has insufficient privileges to save or destroy the group user 1 group object."

Avec le compte user 3, qui est System Administrator, la modification est encore impossible.

API> retrieve,c,dm_group where group_name = 'group user 1'
...
12a447c280001100
API> append,c,l,groups_names
Set >group user 2
...
Ok
API> save,c,l
...
ERROR:
[DM_GROUP_E_NEED_SUPER_USER_PRIV]error:  "The current user (user 3) needs to have superuser privilege to save the group object."

Examples-icon.png En fait, ceci peut s'expliquer par la portée du groupe dm_superusers_dynamic qui est inclus dans dm_superusers. Ce doit être compte l'affectation du privilège Superuser, qui ne peut être réalisé que par un compte déjà Superuser.

Cette constatation peut s'appliquer à d'autre groupes standards.


Configuration App Web-Icon.png Documentum Administrator

Les paragraphes précédents démontrent qu'il n'est nullement nécessaire d'avoir le privilège Sytem Administrator afin de gérer les groupes, surtout quand la valeur group_admin n'est pas renseignée.

Dans le jeu de test, les utilisateurs user 1 et user 2 sont de simples Consumer. Et pourtant, il est impossible de modifier la composition des groupes sous Documentum Administrator. Les menus sont soit grisés soit cachés.

Or il faut savoir que les actions sont définies avec un scope sur le rôle, comme par exemple l'ajout à un groupe pour un utilisateur sélectionné. L'action user_addgroup définie dans le fichier webcomponent/config/admin/user/dm_user_actions.xml, est placé dans le scope sur le privilège sysadm.

   <scope type='dm_user,dm_member_user' privilege='sysadmin'>
      <action id="user_addgroup">

         <params>
            <!-- set a value to override the config setting -->
            <param name='objectname' required='false'/>
            <param name='objectId' required='false'/>
            <param name='flatlist' required='false'/>

            <!-- set to true to enable multiple selections -->
            <param name='multiselect' required='false'/>
         </params>

         <execution class="com.documentum.web.formext.action.LaunchComponent">
            <component>grouplocatorcontainer</component>
         </execution>
            <invocation>
             <modalpopup>
                <windowsize>large</windowsize>
                <refreshparentwindow>onok</refreshparentwindow>
             </modalpopup>
          </invocation>
      </action>
   </scope>

Donc, même si c'est techniquement possible de modifier le groupe en étant lecteur, l'action n'est pas disponible dans Documentum Administrator.