Вы не зашли.
имеются следующие методы:
Код:
// Проверка доступа по группе |
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; } |
Это нормально?
ДАУН-Данная Аватара Унаследована Незнайкой
1) почему ты добавляешь __ перед названием переменных? на сколько я помню это не рекомендуемые названия
2) добавь phpDoc, непонятно, что за переменные вообще
3) for ($i=0;$i < count($this->__groups);$i++) // ну, не мог не доколупаться)
4) getGroup - это не геттер, а сеттер получается. т.е. setGroup
5) я бы отдельный метод написал вообще, наверное
1. Приму к сведению, __ чисто "красиво")
2. Я пока опять с телефона, придется изучать понятия
3. Это перебор всех групп в поисках принадлежности прав к группе
4. setGroup уже есть) Он выступает в роли addGroup, добавление новых
5. Не понял? Без участия getGroup?
Добавлено спустя 3 минуты 44 секунды: и грубо говорю это мои попытки написания классов, поэтому тонкостей не знаю - пишу "как есть"
ДАУН-Данная Аватара Унаследована Незнайкой
вот текущий вариант, не доделан ещё
Вложения
acl.zip
1kb
[
загрузок: 607]
ДАУН-Данная Аватара Унаследована Незнайкой
1) по Zend стандартам на приватные и защищенные методы и свойства отводится ОДНО подчеркивание вначале.
3) count выполняется на каждую итерацию в цикле
4) в любом случае, твой getGroup не выполняет роли геттера, он задает значение переменной $this->__group - следовательно это сеттер.
5) да
ок, переделаю. Но тогда придется вставить код getGroup без return. Более выхода не замечаю
Тогда что делает get?
ДАУН-Данная Аватара Унаследована Незнайкой
НЕЗНАЙКА написал:
придется вставить код getGroup без return
нет, тебе нужно сделать чтобы геттер не выполнял роли сеттера, т.е. не делал
$this->__group[] = $this->__groups[$i]['name'];гет - возвращает данные, но не присваивает)
ясно. Тогда смотри, лучше использовать класс чисто для одного пользователя и гет будет выдавать group. А что придумать, если нужно узнать группу для другого пользователя (в админ панели)? Написать разные методы getGroup и getUserGroup, где usergroup не перезаписываются значения?
ДАУН-Данная Аватара Унаследована Незнайкой
#10.
2010
Off
(1)
Участник
2012.05.08 00:12
НЕЗНАЙКА, кстате, в цикле лучше использовать sizeof чем count.
Она работает быстрее чем конт, если что...
Я всегда только sizeof использую) да и не только в цикле
Отредактировано 2010 (2012.05.08 00:12)