Фильтрация данных в Cakephp - PullRequest
1 голос
/ 08 июля 2011

Пожалуйста, прости меня, я все еще довольно новичок в CakePHP и в процессе восстановления моих избыточных навыков PhP.

Я искал ответ по всему «паутине», к сожалению, безрезультатно.

Вот сценарий:

У меня есть 2 таблицы: 1 - это пользователи, другие группы (для разрешений).

Таблица пользователей - довольно стандартная плюс некоторая дополнительная информация о профиле.

Таблица групп - содержит администраторов, суперпользователей, аутентифицированных пользователей и пользователей, не являющихся пользователями.

Таблица Users используется для аутентификации и профилей (другие пользователи могут просматривать профили пользователей). Имея это в виду, я не могу понять, как отфильтровать, какие пользователи отображаются в представлении индекса, на основании того, к какой группе принадлежат пользователи (а не текущий зарегистрированный пользователь).

Например, профили учетных записей администраторов и суперпользователей отображаются и входят в группы «Администраторы» и «Суперпользователи» соответственно вместе со всеми остальными пользователями. Однако все, что я хочу, чтобы конечные пользователи (Auth Users) могли видеть, это другие профили пользователей, которые являются частью группы Auth Users.

Так что любая помощь будет полезна как для сохранения оставшейся части моих волос, так и для поиска решения этой проблемы, которую я имею.

Хорошо, вот то, что я сделал, работает как шарм. Сконфигурировали переменную paginate, чтобы она выглядела так:

var $paginate = array(
            'fields' => array(
                    'User.img_file', 'User.given_name', 'User.family_name', 'Group.name', 'User.username', 'User.created'),
            'limit' => 10,
            'order' => array(
                'User.given_name' => 'asc'
            )
        );

Затем для функции in index (которую я хотел) я добавил следующее:

function index() {
                $this->User->recursive = 0;
                $this->paginate = array(   
                'conditions' => array(
                                  'group_id' => 3
                ));
                $users = $this->paginate('User');
                $this->set(compact('users'));
}

Это работает так, как я хочу, но если что-то выглядит неправильно или это может быть расширено, пожалуйста, оставляйте комментарии.

1 Ответ

0 голосов
/ 08 июля 2011

Прежде всего, взгляните на это для получения информации об использовании встроенных функций аутентификации в CakePHP.

"Я не могу понять, как отфильтровать, какие пользователи отображаются в представлении индекса, на основании того, к какой группе принадлежат пользователи (не зарегистрированный в данный момент пользователь)."

не 100% от того, что вы подразумеваете под этим, но если вы имеете в виду, что вы хотите видеть только других пользователей, которые являются администраторами (и при условии, что вы знаете, что admin_group_id == 1), то то, что вы хотите, - это следующее.

$administrator_group_id = 1;

$conditions = array(
  'group_id' => "{$administrator_group_id}"
);

$this->data = $this->User->findAll($conditions); 
// note. automatically makes the result data available in the VIEW layer

pr($this->data); // VARDUMP utility

(ps. проверьте, как разбить на страницы эти данные результата )

"... все, что я хочу, чтобы конечные пользователи (пользователи Auth) могли видеть, - это другие профили пользователей, которые входят в группу Auth Users" *

(при условии, что аутентификация вам не помогла.)

(если есть только 3 типа групповых типов, и я могу полностью ими управлять, то я бы рассмотрел не с использованием таблицы групп и перечислением. Вот примечания о том, как это сделать в MySQL

http://dev.mysql.com/doc/refman/5.0/en/enum.html

или, вы можете просто взломать его в PHP.

например.

define('USER', 1);
define('S_USER', 10);
define('ADMIN', 100);

$ user = $ this-> User-> findById ($ my_user_id); // или получить от auth

$условия = массив ( "group_id <=" => "{$ user ['User'] ['group_id']}" );

$ this-> data = $ this-> User-> findAll ($условия); пр ($ this-> данные); // VARDUMP

(то, что я сделал, это то, что вы получили зарегистрированного пользователя, и я убедился, что у ADMIN был ID наивысшего уровня. У SuperUsers был 2-й, а у пользователей самый низкий. Этот запрос вернет всех пользователей, которые находятся на одном и том же уровень или ниже собственного уровня. group_id <= User.group_id) </p>

Надеюсь, я вас не слишком смутил. Просто продолжай экспериментировать с тортом. Это того стоит!

...