* @param $flag XXX
* @return VOID
*/
- public function addflag($flag)
+ public function addFlag($flag)
{
if (!$flag) return;
if (!$this->hasflag($flag)) {
* @param $flag XXX
* @return 1 || 0
*/
- public function hasflag($flag)
+ public function hasFlag($flag)
{
$tok = strtok($this->value,$this->sep);
while ($tok) {
* @param $flag XXX
* @return VOID
*/
- public function rmflag($flag)
+ public function rmFlag($flag)
{
if (!$flag) return;
$newvalue = "";
$this->value=$newvalue;
}
+ /** return the flagset
+ */
+ public function flags()
+ {
+ return $this->value;
+ }
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
return null;
}
+ protected function check_perms($perms)
+ {
+ if (!$perms) { // No perms, no check
+ return true;
+ }
+ $s_perms = S::v('perms');
+
+ // hook perms syntax is
+ $perms = explode(',', $perms);
+ foreach ($perms as $perm)
+ {
+ $ok = true;
+ $rights = explode(':', $perm);
+ foreach ($rights as $right) {
+ if (($right{0} == '!' && $s_perms->hasFlag(substr($right, 1))) || !$s_perms->hasFlag($right)) {
+ $ok = false;
+ }
+ }
+ if ($ok) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private function call_hook(PlatalPage &$page)
{
$hook = $this->find_hook();
return PL_FORBIDDEN;
}
}
-
- if (!empty($hook['perms']) && $hook['perms'] != S::v('perms')) {
+ if ($hook['auth'] != AUTH_PUBLIC && !$this->check_perms($hook['perms'])) {
return PL_FORBIDDEN;
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-class PLModule
+abstract class PLModule
{
- function handlers() { die("implement me"); }
+ abstract function handlers();
- public function make_hook($fun, $auth, $perms = '', $type = DO_AUTH)
+ /** Register a hook
+ * @param fun name of the handler (the exact name will be handler_$fun)
+ * @param auth authentification level of needed to run this handler
+ * @param perms permission required to run this handler
+ * @param type additionnal flags
+ *
+ * Perms syntax is the following:
+ * perms = rights(,rights)*
+ * rights = right(:right)*
+ * right is an atomic right permission (like 'admin', 'user', 'groupadmin', 'groupmember'...)
+ *
+ * If type is set to NO_AUTH, the system will return 403 instead of asking auth data
+ * this is useful for Ajax handlers
+ */
+ public function make_hook($fun, $auth, $perms = 'user', $type = DO_AUTH)
{
return array('hook' => array($this, 'handler_'.$fun),
'auth' => $auth,
public static function has_perms()
{
- return Session::logged() && Session::v('perms') == PERMS_ADMIN;
+ return Session::logged() && Session::v('perms')->hasFlag(PERMS_ADMIN);
}
public static function logged()
$url .= "&url=".urlencode($returl);
$_SESSION['loginX'] = $url;
}
+
+ if (S::logged() && $globals->asso()) {
+ $perms = S::v('perms');
+ $perms->rmFlag('groupadmin');
+ $perms->rmFlag('groupmember');
+ if (may_update()) {
+ $perms->addFlag('groupadmin');
+ $perms->addFlag('groupmember');
+ }
+ if (is_member()) {
+ $perms->addFlag('groupmember');
+ }
+ $_SESSION['perms'] = $perms;
+ }
}
// }}}
// }}}
// {{{ doAuthX
- public static function doAuthX() {
+ public static function doAuthX()
+ {
global $globals, $page;
if (md5('1'.S::v('challenge').$globals->xnet->secret.Get::i('uid').'1') != Get::v('auth')) {
LIMIT 1", Get::i('uid'));
$_SESSION = array_merge($_SESSION, $res->fetchOneAssoc());
$_SESSION['auth'] = AUTH_MDP;
+ require_once 'xorg/session.inc.php';
+ $_SESSION['perms'] =& XorgSession::make_perms(S::v('perms'));
S::kill('challenge');
S::kill('loginX');
S::kill('may_update');
if (!S::has('suid')) {
$_SESSION['suid'] = $_SESSION;
}
- $_SESSION['perms'] = 'user';
+ require_once 'xorg/session.inc.php';
+ $_SESSION['perms'] =& XorgSession::make_perms('user');
}
// }}}
* @param page the calling page (by reference)
*/
public static function doAuthCookie()
+
{
if (S::logged()) {
return true;
}
// }}}
+ // {{{ public static function make_perms()
+
+ public static function &make_perms($perm)
+ {
+ $flags = new FlagSet();
+ if ($perm == 'disabled' || $perm == 'ext') {
+ return $flags;
+ }
+ $flags->addFlag(PERMS_USER);
+ if ($perm == 'admin') {
+ $flags->addFlag(PERMS_ADMIN);
+ }
+ return $flags;
+ }
+
+ // }}}
}
// {{{ function try_cookie()
$_SESSION = array_merge($_SESSION, $sess);
$_SESSION['log'] = $logger;
$_SESSION['auth'] = ($identified ? AUTH_MDP : AUTH_COOKIE);
+ $_SESSION['perms'] =& XorgSession::make_perms($_SESSION['perms']);
$mail_subject = null;
if (check_account()) {
$mail_subject = "Connexion d'un utilisateur surveillé";
$_SESSION['log']->log("suid_start", "login by ".S::v('forlife'));
}
$_SESSION['suid'] = $_SESSION;
- $_SESSION['perms'] = $level;
+ $_SESSION['perms'] =& XorgSession::make_perms($level);
pl_redirect('/');
}
{/if}
</div>
<div style="float:right">
- {if $smarty.session.perms eq 'admin'}
+ {if $smarty.session.perms->hasFlag('admin')}
<a href="admin/events/edit/{$ev.id}">{icon name=page_edit title="Editer cet article"}</a>
{/if}
<a href="events/read/{$ev.id}{if $previd}/newsid{$previd}{/if}" onclick="return readEvent('{$ev.id}')">{icon name=cross title="Cacher cet article"}</a>
{/if}
{/if}
- {if $smarty.session.perms eq admin}
+ {if $smarty.session.perms->hasFlag('admin')}
[{if !$c.wasinscrit && !$c.dcd}
<a href="marketing/private/{$c.user_id}">{*
*}{icon name=email title="marketter user"}</a>
<a href="{if $urlmainsite}{$urlmainsite}{/if}profile/{$p.forlife}" class="popup2">
<img src="{$globals->baseurl}/photo/{$p.forlife}" width="110" alt=" [ PHOTO ] " />
</a>
- {if $trombi_admin && $smarty.session.perms eq 'admin' && !$urlmainsite}
+ {if $trombi_admin && $smarty.session.perms->hasFlag('admin') && !$urlmainsite}
<a href="admin/trombino/{$p.user_id}">
{icon name=wrench title="[admin]"}</a>
{/if}
{/if}
</td>
</tr>
- {if $details.own || $smarty.session.perms eq admin || ($it_is_xnet && $is_admin)}
+ {if $details.own || $smarty.session.perms->hasFlag('admin') || $smarty.session.perms->hasFlag('groupadmin')}
<tr>
<td><strong>Administrer la liste :</strong></td>
<td>
</td>
</tr>
{/if}
- {if $smarty.session.perms eq admin || ($it_is_xnet && $is_admin)}
+ {if $smarty.session.perms->hasFlag('admin') || $smarty.session.perms->hasFlag('groupadmin')}
<tr>
<td><strong>Administrer (avancé) :</strong></td>
{else}
[<a href='nl/show/{$nl->id()}?text=1'>version Texte</a>]
{/if}
-{if $smarty.session.perms eq admin}
+{if $smarty.session.perms->hasFlag('admin')}
[<a href='admin/newsletter/edit/{$nl->id()}'>Editer</a>]
{/if}
</p>
<a href="javascript:chgMainWinLoc('carnet/contacts?action=retirer&user={$x.forlife}')">
{icon name=cross title="Retirer de mes contacts"}</a>
{/if}
- {if $smarty.session.perms eq admin}
+ {if $smarty.session.perms->hasFlag('admin')}
<a href="javascript:chgMainWinLoc('admin/user/{$x.forlife}')">
{icon name=wrench title="administrer user"}</a>
{/if}
<div class="menu_item"><a href="Xorg/NousContacter">Nous contacter</a></div>
<div class="menu_item"><a href="send_bug" class="popup2">Signaler un bug</a></div>
-{if $smarty.session.perms eq admin}
+{if $smarty.session.perms->hasFlag('admin')}
<div class="menu_title">***</div>
<div class="menu_item"><a href="marketing">Marketing</a></div>
<div class="menu_item"><a href="admin/">Administration</a></div>
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms})
+ Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
<div style="display: inline">
<small>voir le site en tant que...
<select name="right" onchange="this.form.submit()">
- {if $smarty.session.perms eq 'admin' || $smarty.session.suid.perms eq 'admin'}
- <option value="admin" {if $smarty.session.perms eq 'admin'}selected="selected"{/if}>Administrateur</option>
+ {if $smarty.session.perms->hasFlag('admin') || $smarty.session.suid.perms->hasFlag('admin')}
+ <option value="admin" {if $smarty.session.perms->hasFlag('admin')}selected="selected"{/if}>Administrateur</option>
{/if}
- <option value="anim" {if $is_admin && $smarty.session.perms neq 'admin'}selected="selected"{/if}>Animateur</option>
+ <option value="anim" {if $is_admin && !$smarty.session.perms->hasFlag('admin')}selected="selected"{/if}>Animateur</option>
<option value="member" {if !$is_admin && $is_member}selected="selected"{/if}>Membre</option>
<option value="logged" {if !$is_admin && !$is_member}selected="selected"{/if}>Non-membre</option>
</select>
{/if}
</td>
<td class="right" style="vertical-align: middle">
- {if $smarty.session.perms eq admin}
+ {if $smarty.session.perms->hasFlag('admin')}
<a href="admin" title="Administration des groupes">
Gérer les groupes
{icon name=wrench title="Administration"}