На одном сайте решил сделать разграничение прав доступа.
В принципе не сложно и самому написать, но получалось уж очень много все. И добавление прав и добавление групп...
Погуглив, набрел на готовое решение _http://net.tutsplus.com/tutorials/php/a-better-login-system/
Хоть статья там и большая... на деле там один файл с классом. Все остальное - формы управления. Именно "готовость" и повлияла на решение взять его.
По глупости начал внедрять сие дело к себе(уж очень понравилось управление всеми правами)... и потом решил проверить количество запросов... как не прискорбно, скрипт делает кучу запросов.
Методом "исследования", были выявлены места которые делают эти самые запросы.
С классами я на ВЫ, и переделать особо не получается.
Прошу помощи в оптимизации. Если у кого будет время, был бы признателен за помощь!
Теперь собственно сам класс
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- class ACL
- {
- var $userID = 0; //Integer : Stores the ID of the current user
- function __constructor($userID = '')
- {
- if ($userID != '')
- {
- } else {
- }
- $this->userRoles = $this->getUserRoles('ids');
- $this->buildACL();
- }
- function ACL($userID = '')
- {
- $this->__constructor($userID);
- //crutch for PHP4 setups
- }
- function buildACL()
- {
- //first, get the rules for the user's role
- {
- }
- //then, get the individual user permissions
- }
- function getPermKeyFromID($permID)
- {
- return $row[0];
- }
- function getPermNameFromID($permID)
- {
- return $row[0];
- }
- function getRoleNameFromID($roleID)
- {
- return $row[0];
- }
- function getUserRoles()
- {
- $strSQL = "SELECT * FROM `user_roles` WHERE `userID` = " . floatval($this->userID) . " ORDER BY `addDate` ASC";
- {
- $resp[] = $row['roleID'];
- }
- return $resp;
- }
- function getAllRoles($format='ids')
- {
- $strSQL = "SELECT * FROM `roles` ORDER BY `roleName` ASC";
- {
- if ($format == 'full')
- {
- } else {
- $resp[] = $row['ID'];
- }
- }
- return $resp;
- }
- function getAllPerms($format='ids')
- {
- $strSQL = "SELECT * FROM `permissions` ORDER BY `permName` ASC";
- {
- if ($format == 'full')
- {
- $resp[$row['permKey']] = array('ID' => $row['ID'], 'Name' => $row['permName'], 'Key' => $row['permKey']);
- } else {
- $resp[] = $row['ID'];
- }
- }
- return $resp;
- }
- function getRolePerms($role)
- {
- {
- $roleSQL = "SELECT * FROM `role_perms` WHERE `roleID` IN (" . implode(",",$role) . ") ORDER BY `ID` ASC";
- } else {
- }
- {
- if ($pK == '') { continue; }
- if ($row['value'] === '1') {
- $hP = true;
- } else {
- $hP = false;
- }
- $perms[$pK] = array('perm' => $pK,'inheritted' => true,'value' => $hP,'Name' => $this->getPermNameFromID($row['permID']),'ID' => $row['permID']);
- }
- return $perms;
- }
- function getUserPerms($userID)
- {
- $strSQL = "SELECT * FROM `user_perms` WHERE `userID` = " . floatval($userID) . " ORDER BY `addDate` ASC";
- {
- if ($pK == '') { continue; }
- if ($row['value'] == '1') {
- $hP = true;
- } else {
- $hP = false;
- }
- $perms[$pK] = array('perm' => $pK,'inheritted' => false,'value' => $hP,'Name' => $this->getPermNameFromID($row['permID']),'ID' => $row['permID']);
- }
- return $perms;
- }
- function userHasRole($roleID)
- {
- foreach($this->userRoles as $k => $v)
- {
- {
- return true;
- }
- }
- return false;
- }
- function hasPermission($permKey)
- {
- {
- if ($this->perms[$permKey]['value'] === '1' || $this->perms[$permKey]['value'] === true)
- {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- function getUsername($userID)
- {
- return $row[0];
- }
- }
- ?>