Вы не зашли.
Главная » PHP » Проверка в классе, наследование
#1. НЕЗНАЙКА Off (11)
Участник
2012.04.18 15:03
имеются следующие методы:
Код:
// Проверка доступа по группе
public function isGroupAllowed($__right, $__access)
{
if (empty($__right) || empty($__access)) return false;
if (in_array($__access, $this->getGroup($__right))) return true;
 
return false;
}
// Получение Группы
public function getGroup($__right)
{
if (empty($__right)) return false;
 
for ($i=0;$i < count($this->__groups);$i++)
{
if (in_array($__right, $this->__groups[$i]['rights']))
{
if (in_array($this->__groups[$i]['name'], $this->__group)) continue;
$this->__group[] = $this->__groups[$i]['name']; break;
}
}
 
return array_unique($this->__group);
}
При использовании проверки isGroupAllowed $__group наследуется, поэтому в группе получаются ложные данные. Пользователь попросту имеет права которые проверяются :-)
Как можно поправить?
Я подумал и верным будет после проверки сбрасывать массив группы.
Код:
if (in_array($__access, $this->getGroup($__right))) { $this->__group = array(); return true; }
Это нормально?
ДАУН-Данная Аватара Унаследована Незнайкой
#2. Gemorroj Off (107)
Administrator
2012.04.18 18:06
1) почему ты добавляешь __ перед названием переменных? на сколько я помню это не рекомендуемые названия
2) добавь phpDoc, непонятно, что за переменные вообще
3) for ($i=0;$i < count($this->__groups);$i++) // ну, не мог не доколупаться)
4) getGroup - это не геттер, а сеттер получается. т.е. setGroup
5) я бы отдельный метод написал вообще, наверное
#3. НЕЗНАЙКА Off (11)
Участник
2012.04.18 21:09
1. Приму к сведению,  __ чисто "красиво")
2. Я пока опять с телефона, придется изучать понятия
3. Это перебор всех групп в поисках принадлежности прав к группе
4. setGroup уже есть) Он выступает в роли addGroup, добавление новых
5. Не понял? Без участия getGroup?
Добавлено спустя   3 минуты  44 секунды:
и грубо говорю это мои попытки написания классов, поэтому тонкостей не знаю - пишу "как есть"
ДАУН-Данная Аватара Унаследована Незнайкой
#4. НЕЗНАЙКА Off (11)
Участник
2012.04.18 21:09
вот текущий вариант, не доделан ещё
Вложения
acl.zip 1kb [загрузок: 607]
ДАУН-Данная Аватара Унаследована Незнайкой
#5. Gemorroj Off (107)
Administrator
2012.04.18 21:09
1) по Zend стандартам на приватные и защищенные методы и свойства отводится ОДНО подчеркивание вначале.
3) count выполняется на каждую итерацию в цикле
4) в любом случае, твой getGroup не выполняет роли геттера, он задает значение переменной $this->__group - следовательно это сеттер.
5) да
#6. НЕЗНАЙКА Off (11)
Участник
2012.04.18 22:10
ок, переделаю. Но тогда придется вставить код getGroup без return. Более выхода не замечаю
Тогда что делает get?
ДАУН-Данная Аватара Унаследована Незнайкой
#7. Gemorroj Off (107)
Administrator
2012.04.19 11:11
НЕЗНАЙКА написал:
придется вставить код getGroup без return
нет, тебе нужно сделать чтобы геттер не выполнял роли сеттера, т.е. не делал $this->__group[] = $this->__groups[$i]['name'];
гет - возвращает данные, но не присваивает)
#8. НЕЗНАЙКА Off (11)
Участник
2012.04.19 12:12
ясно. Тогда смотри, лучше использовать класс чисто для одного пользователя и гет будет выдавать group. А что придумать, если нужно узнать группу для другого пользователя (в админ панели)? Написать разные методы getGroup и getUserGroup, где usergroup не перезаписываются значения?
ДАУН-Данная Аватара Унаследована Незнайкой
#9. Gemorroj Off (107)
Administrator
2012.04.19 13:01
как вариант да.
#10. 2010 Off (1)
Участник
2012.05.08 00:12
НЕЗНАЙКА, кстате, в цикле лучше использовать sizeof чем count.
Она работает быстрее чем конт, если что...
Я всегда только sizeof использую) да и не только в цикле
Отредактировано 2010 (2012.05.08 00:12)
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.013 s