Administration groupes Documentum
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
.
Sommaire
Votre avis
Nobody voted on this yet
|
|
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.
Jeu de tests via API
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 |
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 |
Exécutions
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
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.
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
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
.
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
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.
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."
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.
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
.