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> <title>Profils d'utilisateurs</title>
<para>Cette section décrit la manière dont sont définis les profils d'utilisateurs <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 se connectant à l'interface appelés <emphasis>LSprofile</emphasis>. Il est possible
possible de définir autant de profils d'utilisateurs que l'on souhaite. Pour d'attribuer un profil à l'utilisateur connecté sur tout ou partie de l'annuaire LDAP.
chaque profil d'utilisateur, il faudra définir dans quelles parties de </para>
l'annuaire ce profil existe (Exemple : les admistrateurs de groupes existent
uniquement dans la branche de l'annuaire stockant les groupes). Enfin pour <sect5 id='config-LSprofile-default'>
chaque partie de l'annuaire, il faudra définir la manière d'identifier si <title>Profils d'utilisateurs par défaut</title>
l'utilisateur qui se connecte appartient à ce profil.</para> <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"> <programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>... <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 label sera utilisé pour faire référence au <emphasis>LSprofile</emphasis> lorsque
nécéssaire. <emphasis>(Paramètre facultatif)</emphasis></para> nécéssaire. <emphasis>(Paramètre facultatif)</emphasis></para>
</sect5>
</sect4> </sect4>
<!-- Fin LSprofiles --> <!-- Fin LSprofiles -->

View file

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

View file

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

View file

@ -61,9 +61,17 @@ function LSaccessRightsMatrixView() {
$LSprofiles = array( $LSprofiles = array(
'user' => _('All connected users'), '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"])) if (isset(LSsession :: $ldapServer["LSprofiles"]) && is_array(LSsession :: $ldapServer["LSprofiles"]))
foreach(LSsession :: $ldapServer["LSprofiles"] as $LSprofile => $LSprofile_conf) foreach(LSsession :: $ldapServer["LSprofiles"] as $LSprofile => $LSprofile_conf)
$LSprofiles[$LSprofile] = (isset($LSprofile_conf['label'])?__($LSprofile_conf['label']):$LSprofile); $LSprofiles[$LSprofile] = (isset($LSprofile_conf['label'])?__($LSprofile_conf['label']):$LSprofile);
$LSobjects = array(); $LSobjects = array();
foreach (LSsession :: $ldapServer["LSaccess"] as $LSobject) { foreach (LSsession :: $ldapServer["LSaccess"] as $LSobject) {
if (!LSsession :: loadLSobject($LSobject)) if (!LSsession :: loadLSobject($LSobject))
@ -74,7 +82,7 @@ function LSaccessRightsMatrixView() {
foreach(LSconfig :: get("LSobjects.$LSobject.attrs", array()) as $attr_name => $attr_config) { foreach(LSconfig :: get("LSobjects.$LSobject.attrs", array()) as $attr_name => $attr_config) {
$raw_attr_rights = LSconfig :: get('rights', array(), 'array', $attr_config); $raw_attr_rights = LSconfig :: get('rights', array(), 'array', $attr_config);
$attr_rights = array(); $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); $attr_rights['self'] = LSconfig :: get('self', False, null, $raw_attr_rights);
foreach(array_keys($LSprofiles) as $LSprofile) { foreach(array_keys($LSprofiles) as $LSprofile) {
$attr_rights[$LSprofile] = LSconfig :: get($LSprofile, False, null, $raw_attr_rights); $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) { foreach(LSconfig :: get("LSobjects.$LSobject.LSrelation", array()) as $relation_name => $relation_config) {
$raw_relation_rights = LSconfig :: get('rights', array(), 'array', $relation_config); $raw_relation_rights = LSconfig :: get('rights', array(), 'array', $relation_config);
$relation_rights = array(); $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); $relation_rights['self'] = LSconfig :: get('self', False, null, $raw_relation_rights);
foreach(array_keys($LSprofiles) as $LSprofile) { foreach(array_keys($LSprofiles) as $LSprofile) {
$relation_rights[$LSprofile] = LSconfig :: get($LSprofile, False, null, $raw_relation_rights); $relation_rights[$LSprofile] = LSconfig :: get($LSprofile, False, null, $raw_relation_rights);
@ -112,7 +120,7 @@ function LSaccessRightsMatrixView() {
reset($LSobjects); reset($LSobjects);
$LSobject = (isset($_REQUEST['LSobject']) && array_key_exists($_REQUEST['LSobject'], $LSobjects)?$_REQUEST['LSobject']:key($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); $LSprofiles = array_merge(array('self' => _('The user him-self')), $LSprofiles);
LSlog :: get_logger('LSaddon_LSaccessRightsMatrixView') -> debug($LSobjects); LSlog :: get_logger('LSaddon_LSaccessRightsMatrixView') -> debug($LSobjects);

View file

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