Add default LSprofiles with the name of authenticable object types

Consquently adjust LSaccessRigthsMatrixView addon and make some 
representative change in LSexample for demo
This commit is contained in:
Benjamin Renard 2020-05-25 11:09:32 +02:00
parent cf1a98e4b3
commit d68b15bac3
5 changed files with 102 additions and 44 deletions

View file

@ -4,13 +4,53 @@
<title>Profils d'utilisateurs</title>
<para>Cette section décrit la manière dont sont définis les profils d'utilisateurs
se connectant à l'interface appelés <emphasis>LSprofile</emphasis>. Il est
possible de définir autant de profils d'utilisateurs que l'on souhaite. Pour
chaque profil d'utilisateur, il faudra définir dans quelles parties de
l'annuaire ce profil existe (Exemple : les admistrateurs de groupes existent
uniquement dans la branche de l'annuaire stockant les groupes). Enfin pour
chaque partie de l'annuaire, il faudra définir la manière d'identifier si
l'utilisateur qui se connecte appartient à ce profil.</para>
se connectant à l'interface appelés <emphasis>LSprofile</emphasis>. Il est possible
d'attribuer un profil à l'utilisateur connecté sur tout ou partie de l'annuaire LDAP.
</para>
<sect5 id='config-LSprofile-default'>
<title>Profils d'utilisateurs par défaut</title>
<para>Il existe des profils d'utilisateurs par défaut, non liée à la configuration de
l'application:
<variablelist>
<varlistentry>
<term>user</term>
<listitem>
<simpara>Tous les utilisateurs connectés à l'utilisateur. Ce &LSprofile; est valide sur l'ensemble de l'annuaire.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>self</term>
<listitem>
<simpara>L'utilisateur connecté sur son objet correspondant dans l'annuaire. Ce &LSprofile; est utile pour donner des
droits à l'utilisateur sur lui-même.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>nom du type de l'objet connecté</term>
<listitem>
<simpara>Un &LSprofile; du nom du type d'objet utilisateur connecté est automatiquement ajouté à l'utilisateur.
Ainsi, si l'utilisateur connecté est un &LSobject; <literal>LSpeople</literal> par exemple, il aura le &LSprofile;
<literal>LSpeople</literal> sur tous l'annuaire. Ce &LSprofile; est utile pour donner des droits à tous un type
d'objets pouvant se connecter à l'application (par exemple, tous les utilisateurs applicatifs).</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect5>
<sect5 id='config-LSprofile-custom'>
<title>Profils d'utilisateurs personalisés</title>
<para>Il est possible de définir autant de profils d'utilisateurs que l'on souhaite. Pour chaque profil
d'utilisateur personnalisé, il faudra définir dans quelles parties de l'annuaire ce profil existe (Exemple :
les admistrateurs de groupes existent uniquement dans la branche de l'annuaire stockant les groupes). Enfin
pour chaque partie de l'annuaire, il faudra définir la manière d'identifier si l'utilisateur qui se connecte
appartient à ce profil.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
@ -288,5 +328,7 @@ objets retournés. Les paramètres de la recherche sont&nbsp;:
label sera utilisé pour faire référence au <emphasis>LSprofile</emphasis> lorsque
nécéssaire. <emphasis>(Paramètre facultatif)</emphasis></para>
</sect5>
</sect4>
<!-- Fin LSprofiles -->

View file

@ -48,7 +48,8 @@ $GLOBALS['LSobjects']['LSsysaccount'] = array (
'linkAttributeValue' => "dn",
'rights' => array(
'admin' => 'w',
'admingroup' => 'w'
'admingroup' => 'w',
'LSsysaccount' => 'r',
),
),
),
@ -78,6 +79,7 @@ $GLOBALS['LSobjects']['LSsysaccount'] = array (
),
'rights' => array(
'self' => 'r',
'LSsysaccount' => 'r',
'admin' => 'w',
),
'view' => 1,
@ -139,6 +141,7 @@ $GLOBALS['LSobjects']['LSsysaccount'] = array (
'multiple' => 1,
'rights' => array(
'self' => 'r',
'LSsysaccount' => 'r',
'admin' => 'w',
),
'view' => 1,

View file

@ -24,5 +24,6 @@ $GLOBALS['LSaddons']['loads'] = array (
'samba',
'posix',
'ftp',
'maildir'
'maildir',
'LSaccessRightsMatrixView'
);

View file

@ -61,9 +61,17 @@ function LSaccessRightsMatrixView() {
$LSprofiles = array(
'user' => _('All connected users'),
);
// Authenticable user objects types
$authObjTypes = LSauth :: getAuthObjectTypes();
foreach ($authObjTypes as $objType => $objParams)
if (LSsession :: loadLSobject($objType))
$LSprofiles[$objType] = LSldapObject :: getLabel($objType);
// Custom configured LSprofiles
if (isset(LSsession :: $ldapServer["LSprofiles"]) && is_array(LSsession :: $ldapServer["LSprofiles"]))
foreach(LSsession :: $ldapServer["LSprofiles"] as $LSprofile => $LSprofile_conf)
$LSprofiles[$LSprofile] = (isset($LSprofile_conf['label'])?__($LSprofile_conf['label']):$LSprofile);
$LSobjects = array();
foreach (LSsession :: $ldapServer["LSaccess"] as $LSobject) {
if (!LSsession :: loadLSobject($LSobject))
@ -74,7 +82,7 @@ function LSaccessRightsMatrixView() {
foreach(LSconfig :: get("LSobjects.$LSobject.attrs", array()) as $attr_name => $attr_config) {
$raw_attr_rights = LSconfig :: get('rights', array(), 'array', $attr_config);
$attr_rights = array();
if ($LSobject == LSsession :: get('authenticated_user_type'))
if (array_key_exists($LSobject, $authObjTypes))
$attr_rights['self'] = LSconfig :: get('self', False, null, $raw_attr_rights);
foreach(array_keys($LSprofiles) as $LSprofile) {
$attr_rights[$LSprofile] = LSconfig :: get($LSprofile, False, null, $raw_attr_rights);
@ -90,7 +98,7 @@ function LSaccessRightsMatrixView() {
foreach(LSconfig :: get("LSobjects.$LSobject.LSrelation", array()) as $relation_name => $relation_config) {
$raw_relation_rights = LSconfig :: get('rights', array(), 'array', $relation_config);
$relation_rights = array();
if ($LSobject == LSsession :: get('authenticated_user_type'))
if (array_key_exists($LSobject, $authObjTypes))
$relation_rights['self'] = LSconfig :: get('self', False, null, $raw_relation_rights);
foreach(array_keys($LSprofiles) as $LSprofile) {
$relation_rights[$LSprofile] = LSconfig :: get($LSprofile, False, null, $raw_relation_rights);
@ -112,7 +120,7 @@ function LSaccessRightsMatrixView() {
reset($LSobjects);
$LSobject = (isset($_REQUEST['LSobject']) && array_key_exists($_REQUEST['LSobject'], $LSobjects)?$_REQUEST['LSobject']:key($LSobjects));
if ($LSobject == LSsession :: get('authenticated_user_type'))
if (array_key_exists($LSobject, $authObjTypes))
$LSprofiles = array_merge(array('self' => _('The user him-self')), $LSprofiles);
LSlog :: get_logger('LSaddon_LSaccessRightsMatrixView') -> debug($LSobjects);

View file

@ -1896,9 +1896,10 @@ class LSsession {
$access=array();
foreach(self :: $ldapServer['LSaccess'] as $objectType) {
if (self :: loadLSobject($objectType)) {
if (self :: canAccess($objectType)) {
$access[$objectType] = LSconfig :: get('LSobjects.'.$objectType.'.label');
}
if (self :: canAccess($objectType))
$access[$objectType] = $objectType :: getLabel();
else
self :: log_debug("loadLSaccess(): authenticated user have no access to $objectType");
}
}
$LSaccess[self :: $topDn] = $access;
@ -2005,6 +2006,9 @@ class LSsession {
public static function whoami($dn) {
$retval = array('user');
if (self :: $LSuserObjectType)
$retval[] = self :: $LSuserObjectType;
foreach(self :: $LSprofiles as $profile => $infos) {
if(self :: isLSprofile($dn,$profile)) {
$retval[]=$profile;