X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fxnet%2Fsession.inc.php;h=92c189ab81bfb908efdfa0dc20b312a01ccff9bb;hb=9fcc656556e911e89ecb0d9712785a19a7025da9;hp=8ef9aacb125ba99ca162ab10d02fa8a69416467f;hpb=b8e265bfd41bb292dc7d92fe8fa14602697a4380;p=platal.git diff --git a/include/xnet/session.inc.php b/include/xnet/session.inc.php index 8ef9aac..92c189a 100644 --- a/include/xnet/session.inc.php +++ b/include/xnet/session.inc.php @@ -1,6 +1,6 @@ xnet->secret); $url .= "&url=".urlencode($returl); $_SESSION['loginX'] = $url; } + + if (S::logged() && $globals->asso()) { + $perms = S::v('perms'); + $perms->rmFlag('groupadmin'); + $perms->rmFlag('groupmember'); + $perms->rmFlag('groupannu'); + if (may_update()) { + $perms->addFlag('groupadmin'); + $perms->addFlag('groupmember'); + $perms->addFlag('groupannu'); + } + if (is_member()) { + $perms->addFlag('groupmember'); + if ($globals->asso('pub') != 'private') { + $perms->addFlag('groupannu'); + } + } + if ($globals->asso('cat') == 'Promotions') { + $perms->addFlag('groupannu'); + } + $_SESSION['perms'] = $perms; + } } // }}} @@ -60,9 +83,9 @@ class XnetSession */ public static function doAuth() { - if (S::identified()) { // ok, c'est bon, on n'a rien à faire - return true; - } + if (S::identified()) { // ok, c'est bon, on n'a rien à faire + return true; + } if (Get::has('auth')) { return XnetSession::doAuthX(); @@ -81,10 +104,16 @@ class XnetSession // }}} // {{{ 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')) { + Get::kill('auth'); + if (!$page) { + require_once 'xnet.inc.php'; + new_skinned_page('platal/index.tpl'); + } $page->kill("Erreur d'authentification avec polytechnique.org !"); } @@ -99,8 +128,12 @@ class XnetSession 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'); + S::kill('is_member'); Get::kill('auth'); Get::kill('uid'); $path = Get::v('n'); @@ -116,36 +149,42 @@ class XnetSession } // }}} -} - -// {{{ doSelfSuid + // {{{ doSelfSuid -function doSelfSuid() -{ - if (!S::has('suid')) { - $_SESSION['suid'] = $_SESSION; + public static function doSelfSuid() + { + if (!S::has('suid')) { + $_SESSION['suid'] = $_SESSION; + } + require_once 'xorg/session.inc.php'; + $_SESSION['perms'] =& XorgSession::make_perms('user'); } - $_SESSION['perms'] = 'user'; -} -// }}} -// {{{ killSuid + // }}} + // {{{ killSuid -function killSuid() -{ - if (!S::has('suid')) { - return; + public static function killSuid() + { + if (!S::has('suid')) { + return; + } + $suid = S::v('suid'); + S::kill('suid'); + S::kill('may_update'); + S::kill('is_member'); + $_SESSION['perms'] = $suid['perms']; } - $suid = S::v('suid'); - S::kill('suid'); - S::kill('may_update'); - S::kill('is_member'); - $_SESSION['perms'] = $suid['perms']; + + // }}} } // }}} -// {{{ may_update +// {{{ function may_update +/** Return administration rights for the current asso + * @param force Force administration rights to be read from database + * @param lose Force administration rights to be false + */ function may_update($force = false, $lose = false) { if (!isset($_SESSION['may_update'])) { @@ -155,23 +194,29 @@ function may_update($force = false, $lose = false) global $globals; $asso_id = $globals->asso('id'); - if (!$asso_id) { return false; } - if (S::has_perms() && !$lose) { return true; } - if ((!isset($may_update[$asso_id]) || $force) && !$lose) { + if (!$asso_id) { + return false; + } elseif ($lose) { + $may_update[$asso_id] = false; + } elseif (S::has_perms() || (S::has('suid') && $force)) { + $may_update[$asso_id] = true; + } elseif (!isset($may_update[$asso_id]) || $force) { $res = XDB::query("SELECT perms FROM groupex.membres WHERE uid={?} AND asso_id={?}", - S::v('uid'), $globals->asso('id')); + S::v('uid'), $asso_id); $may_update[$asso_id] = ($res->fetchOneCell() == 'admin'); - } elseif ($lose) { - $may_update[$asso_id] = false; } return $may_update[$asso_id]; } // }}} -// {{{ is_member +// {{{ function is_member +/** Get membership informations for the current asso + * @param force Force membership to be read from database + * @param lose Force membership to be false + */ function is_member($force = false, $lose = false) { if (!isset($_SESSION['is_member'])) { @@ -181,20 +226,22 @@ function is_member($force = false, $lose = false) global $globals; $asso_id = $globals->asso('id'); - if (!$asso_id) { return false; } - if ((!isset($is_member[$asso_id]) || $force) && !$lose) { - $res = XDB::query( - "SELECT COUNT(*) - FROM groupex.membres - WHERE uid={?} AND asso_id={?}", - S::v('uid'), $asso_id); - $is_member[$asso_id] = $res->fetchOneCell() == 1; + if (!$asso_id) { + return false; } elseif ($lose) { $is_member[$asso_id] = false; + } elseif (S::has('suid') && $force) { + $is_member[$asso_id] = true; + } elseif (!isset($is_member[$asso_id]) || $force) { + $res = XDB::query("SELECT COUNT(*) + FROM groupex.membres + WHERE uid={?} AND asso_id={?}", + S::v('uid'), $asso_id); + $is_member[$asso_id] = ($res->fetchOneCell() == 1); } return $is_member[$asso_id]; } // }}} -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>