mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-18 00:09:06 +01:00
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:
parent
cf1a98e4b3
commit
d68b15bac3
5 changed files with 102 additions and 44 deletions
|
@ -2,16 +2,56 @@
|
|||
<!-- Début LSprofiles -->
|
||||
<sect4 id='config-LSprofile'>
|
||||
<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>...
|
||||
<![CDATA['LSprofile' => array (
|
||||
|
@ -27,12 +67,12 @@
|
|||
)
|
||||
),
|
||||
'LSobjects' => array ( // via une liste d'objet sur lequel l'utilisateur a des pouvoirs
|
||||
[nom du LSobject] => array (
|
||||
[nom du LSobject] => array (
|
||||
'attr' => [nom de l'attribut clé],
|
||||
'attr_value' => [format de la valeur de l'attribut clé],
|
||||
// ou
|
||||
'filter' => [format du filtre de recherche],
|
||||
|
||||
|
||||
'basedn' => [basedn de recherche],
|
||||
'params' => [configuration de la recherche]
|
||||
),
|
||||
|
@ -56,7 +96,7 @@
|
|||
...
|
||||
),]]>
|
||||
...
|
||||
</programlisting>
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Le paramètre <varname>LSprofiles</varname> est un tableau associatif contenant,
|
||||
|
@ -66,7 +106,7 @@ la configuration nécessaire pour déterminer si l'utilisateur connecté apparti
|
|||
</para>
|
||||
|
||||
<para>
|
||||
Dans chaque configuration de <emphasis>LSprofile</emphasis>, il est possible
|
||||
Dans chaque configuration de <emphasis>LSprofile</emphasis>, il est possible
|
||||
d'identifier l'appartenance ou non de l'utilisateur connecté de deux manières :
|
||||
</para>
|
||||
|
||||
|
@ -74,9 +114,9 @@ d'identifier l'appartenance ou non de l'utilisateur connecté de deux manières&
|
|||
|
||||
<!-- D - Pour basedn -->
|
||||
<listitem>
|
||||
<para>Pour une branche de l'annuaire donnée (<emphasis>basedn</emphasis>) :
|
||||
<para>Pour une branche de l'annuaire donnée (<emphasis>basedn</emphasis>) :
|
||||
en listant les utilisateurs appartenant à ce <emphasis>LSprofile</emphasis> pour
|
||||
tous les objets de la branche. Il sera possible de lister les utilisateurs dont
|
||||
tous les objets de la branche. Il sera possible de lister les utilisateurs dont
|
||||
on connait le <emphasis>DN</emphasis> ou de lister les utilisateurs appartenant
|
||||
à une liste stockée dans l'annuaire (par exemple la liste des membres d'un
|
||||
groupe).</para>
|
||||
|
@ -103,12 +143,12 @@ groupe).</para>
|
|||
),]]>
|
||||
...
|
||||
</programlisting>
|
||||
<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
|
||||
<emphasis>basedn</emphasis> donnés, on définit l'utilisateur appartenant au
|
||||
<emphasis>LSprofile</emphasis> en donnant son <emphasis>DN</emphasis>. Si on
|
||||
souhaite lister plusieurs utilisateurs, on utilise un tableau associatif dans
|
||||
<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
|
||||
<emphasis>basedn</emphasis> donnés, on définit l'utilisateur appartenant au
|
||||
<emphasis>LSprofile</emphasis> en donnant son <emphasis>DN</emphasis>. Si on
|
||||
souhaite lister plusieurs utilisateurs, on utilise un tableau associatif dans
|
||||
lequel les clés sont les <emphasis>DNs</emphasis> des utilisateurs et les valeurs
|
||||
associées sont toutes <emphasis>NULL</emphasis>.</simpara>
|
||||
associées sont toutes <emphasis>NULL</emphasis>.</simpara>
|
||||
</listitem>
|
||||
<!-- F - Liste de DNs -->
|
||||
|
||||
|
@ -130,10 +170,10 @@ associées sont toutes <emphasis>NULL</emphasis>.</simpara>
|
|||
),]]>
|
||||
...
|
||||
</programlisting>
|
||||
<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
|
||||
<emphasis>basedn</emphasis> donnés, on liste les utilisateurs du
|
||||
<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
|
||||
<emphasis>basedn</emphasis> donnés, on liste les utilisateurs du
|
||||
<emphasis>LSprofile</emphasis> référencés dans l'attribut <varname>attr</varname>
|
||||
de l'object de type <varname>LSobject</varname> et selon le format de valeur
|
||||
de l'object de type <varname>LSobject</varname> et selon le format de valeur
|
||||
décrit dans <varname>attr_value</varname>.</simpara>
|
||||
</listitem>
|
||||
<!-- F - Liste stocké -->
|
||||
|
@ -148,8 +188,8 @@ décrit dans <varname>attr_value</varname>.</simpara>
|
|||
<listitem>
|
||||
<simpara>Pour un type de <emphasis>LSobject</emphasis> donné : en listant
|
||||
les objets pour lesquels l'utilisateur aura les droits du LSprofile. Il sera
|
||||
possible, à travers une recherche paramétrable dans l'annuaire, de lister les
|
||||
objets pour lesquels l'utilisateur appartiendra au
|
||||
possible, à travers une recherche paramétrable dans l'annuaire, de lister les
|
||||
objets pour lesquels l'utilisateur appartiendra au
|
||||
<emphasis>LSprofile</emphasis>.</simpara>
|
||||
<programlisting linenumbering="unnumbered">
|
||||
<citetitle>Structure</citetitle>...
|
||||
|
@ -157,12 +197,12 @@ objets pour lesquels l'utilisateur appartiendra au
|
|||
[nom d'un LSprofile] => array (
|
||||
'LSobjects' => array ( // via un liste d'objet pour lequel l'utilisateur
|
||||
// appartient au LSprofile
|
||||
[nom du LSobject] => array (
|
||||
[nom du LSobject] => array (
|
||||
'attr' => [nom de l'attribut clé],
|
||||
'attr_value' => [format de la valeur de l'attribut clé],
|
||||
// or
|
||||
'filter' => [format du filtre de recherche],
|
||||
|
||||
|
||||
'basedn' => [basedn de recherche],
|
||||
'params' => [configuration de la recherche]
|
||||
),
|
||||
|
@ -186,7 +226,7 @@ objets pour lesquels l'utilisateur appartiendra au
|
|||
...
|
||||
),]]>
|
||||
...
|
||||
</programlisting>
|
||||
</programlisting>
|
||||
<para>Explications : Dans la configuration d'un <emphasis>LSprofile</emphasis>,
|
||||
la valeur clé <emphasis>LSobjects</emphasis> signifie qu'on est dans un cas de la
|
||||
délégation de droits sur des types d'LSobject. Dans ce tableau associatif, il
|
||||
|
@ -228,7 +268,7 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<varlistentry>
|
||||
<term>attr</term>
|
||||
<listitem>
|
||||
<simpara>Nom de l'attribut des LSobjets contenant une valeur clé qui
|
||||
<simpara>Nom de l'attribut des LSobjets contenant une valeur clé qui
|
||||
permettra d'identifier l'utilisateur comme ayant droit.</simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -238,7 +278,7 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<listitem>
|
||||
<simpara>Le format de la valeur clé prise par l'attribut <varname>attr</varname>.
|
||||
Ce format est composé à partir des données de l'objet de l'utilisateur
|
||||
connecté. Voir le paragraphe <link linkend="config-LSformat">Format
|
||||
connecté. Voir le paragraphe <link linkend="config-LSformat">Format
|
||||
paramètrable</link> pour plus d'informations sur l'écriture du format.</simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -246,9 +286,9 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<varlistentry>
|
||||
<term>filter</term>
|
||||
<listitem>
|
||||
<simpara>Ce paramètre remplace les paramètres <varname>attr</varname> et
|
||||
<varname>attr_value</varname>. Il est possible ici d'écrire directement le
|
||||
format paramètrable du filtre recherche dans l'annuaire. Ce filtre sera
|
||||
<simpara>Ce paramètre remplace les paramètres <varname>attr</varname> et
|
||||
<varname>attr_value</varname>. Il est possible ici d'écrire directement le
|
||||
format paramètrable du filtre recherche dans l'annuaire. Ce filtre sera
|
||||
automatiquement agrémenté des conditions sur l'attribut <emphasis>objectclass</emphasis>.
|
||||
Voir le paragraphe <link linkend="config-LSformat">Format paramètrable</link>
|
||||
pour plus d'informations sur l'écriture du format.</simpara>
|
||||
|
@ -259,7 +299,7 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<term>basedn</term>
|
||||
<listitem>
|
||||
<simpara>C'est le <emphasis>basedn</emphasis> de la recherche. Il est possible
|
||||
ainsi de la limiter sur les LSojects d'une branche précise de l'annuaire.
|
||||
ainsi de la limiter sur les LSojects d'une branche précise de l'annuaire.
|
||||
<emphasis>(Paramètre facultatif)</emphasis></simpara>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -267,7 +307,7 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<varlistentry>
|
||||
<term>params</term>
|
||||
<listitem>
|
||||
<simpara>C'est un tableau associatif contenant les paramètres étendus de la
|
||||
<simpara>C'est un tableau associatif contenant les paramètres étendus de la
|
||||
recherche. Voir le paragraphe <link linkend="config-search-params">
|
||||
Paramètres étendus des recherches dans l'annuaire</link> pour plus de détails.
|
||||
<emphasis>(Paramètre facultatif)</emphasis></simpara>
|
||||
|
@ -287,6 +327,8 @@ objets retournés. Les paramètres de la recherche sont :
|
|||
<emphasis>LSprofile</emphasis> à l'aide de la clé <literal>label</literal>. Ce
|
||||
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 -->
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -24,5 +24,6 @@ $GLOBALS['LSaddons']['loads'] = array (
|
|||
'samba',
|
||||
'posix',
|
||||
'ftp',
|
||||
'maildir'
|
||||
'maildir',
|
||||
'LSaccessRightsMatrixView'
|
||||
);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue