НЕЗНАЙКА » 2012.04.18 15:45

имеются следующие методы:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Проверка доступа по группе
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 наследуется, поэтому в группе получаются ложные данные. Пользователь попросту имеет права которые проверяются :-)
Как можно поправить?
Я подумал и верным будет после проверки сбрасывать массив группы.

Код:

1
if (in_array($__access, $this->getGroup($__right))) { $this->__group = array(); return true; }

Это нормально?

Gemorroj » 2012.04.18 18:05

1) почему ты добавляешь __ перед названием переменных? на сколько я помню это не рекомендуемые названия
2) добавь phpDoc, непонятно, что за переменные вообще
3) for ($i=0;$i < count($this->__groups);$i++) // ну, не мог не доколупаться)
4) getGroup - это не геттер, а сеттер получается. т.е. setGroup
5) я бы отдельный метод написал вообще, наверное

НЕЗНАЙКА » 2012.04.18 21:22

1. Приму к сведению,  __ чисто "красиво")
2. Я пока опять с телефона, придется изучать понятия
3. Это перебор всех групп в поисках принадлежности прав к группе
4. setGroup уже есть) Он выступает в роли addGroup, добавление новых
5. Не понял? Без участия getGroup?
Добавлено спустя   3 минуты  44 секунды:
и грубо говорю это мои попытки написания классов, поэтому тонкостей не знаю - пишу "как есть"

НЕЗНАЙКА » 2012.04.18 21:45

вот текущий вариант, не доделан ещё

Gemorroj » 2012.04.18 21:54

1) по Zend стандартам на приватные и защищенные методы и свойства отводится ОДНО подчеркивание вначале.
3) count выполняется на каждую итерацию в цикле
4) в любом случае, твой getGroup не выполняет роли геттера, он задает значение переменной $this->__group - следовательно это сеттер.
5) да

НЕЗНАЙКА » 2012.04.18 22:07

ок, переделаю. Но тогда придется вставить код getGroup без return. Более выхода не замечаю
Тогда что делает get?

Gemorroj » 2012.04.19 11:25

НЕЗНАЙКА написал:

придется вставить код getGroup без return

нет, тебе нужно сделать чтобы геттер не выполнял роли сеттера, т.е. не делал $this->__group[] = $this->__groups[$i]['name'];
гет - возвращает данные, но не присваивает)

НЕЗНАЙКА » 2012.04.19 12:47

ясно. Тогда смотри, лучше использовать класс чисто для одного пользователя и гет будет выдавать group. А что придумать, если нужно узнать группу для другого пользователя (в админ панели)? Написать разные методы getGroup и getUserGroup, где usergroup не перезаписываются значения?

Gemorroj » 2012.04.19 13:36

как вариант да.

2010 » 2012.05.08 00:02

НЕЗНАЙКА, кстате, в цикле лучше использовать sizeof чем count.
Она работает быстрее чем конт, если что...
Я всегда только sizeof использую) да и не только в цикле

Gemorroj » 2012.05.08 10:12

Да, я тоже по статье старой из php4 переучился использовать sizeof, а не count. Но боюсь, что сейчас это уже не актуально.