Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a filter inside a beforeRemote remote hook

I have a problem I can't find an answer to in Loopback's docs.

Say I have a model Company and a modelEmployee. There is an 1Xn relation between the Company and its Employees. When /api/Employees is called, server returns all the employees.

I only want to return the list of employees who are in the same company with the user requesting the list.

For this, I created a remote hook

     Employee.beforeRemote('find', function(context, modelInstance, next) {
        var reject = function() {
            process.nextTick(function() {
                next(null, false);
            });
        };

        // do not allow anonymous users
        var userId = context.req.accessToken.userId;
        if (!userId) {
            return reject();
        }

        //I get the details of the user who sent the request 
        //to learn which company does he belong to
        Employee.findById(userId, function(err, user) {
            if(!context.req.query.filter) context.req.query.filter={};
            context.req.query.filter.where = {brandId:user.companyId};
            console.log(context.req.query);
            next();
        });

    });

I thought this should work every time, but appearantly it only works when find already has some query filters like include - although the console.log prints a correct context.req.query object.

What am I missing? Any help would be greatly appreciated!

like image 915
Mihaly KR Avatar asked Mar 31 '15 16:03

Mihaly KR


1 Answers

context.args.filter seems to work for this purpose. As a side note, instead of replacing where, you might want to merge it with something provided by client. For implementation idea you can refer to: https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/utils.js#L56-L122

like image 98
Alex V Avatar answered Oct 18 '22 18:10

Alex V