> ## Documentation Index
> Fetch the complete documentation index at: https://docs.forest.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a scope more than one level away based on a Smart field

**Context:** As a user I want to create a scope on a table that does not have the tag column in the table.

As a user I want to create a scope on related tables more than one level away

**Example:**

The objective is to implement scopes on all tables, filtering on`companies` to make sure that companies can only see their own data. In this example, `companies` has many `departments`, `departments` has many `users`. The company id is not in `users` table but in the `departments` table. We want to scope `users` according to a company value.

### **Step 1: Create a smart field and the filter for the `users` table**

<Tabs>
  <Tab title="SQL">
    ```javascript theme={null}
    const { collection } = require('forest-express-sequelize');
    const { users, departments, companies } = require('../models');
    const models = require('../models');
    const { Op } = models.objectMapping;

    collection('users', {
      actions: [],
      fields: [
        {
          field: 'company name',
          isFilterable: true,
          type: 'String',
          get: async (user) => {
            //We are looking for the company name of the user (user belongs to a department that belongs to a company)
            const company = await companies.findOne({
              attributes: ['name'],
              include: {
                required: true,
                model: departments,
                where: { id: user.departmentId },
              },
            });

            return company.name;
          },
          filter: async ({ condition: { value, operator } }) => {
            switch (operator) {
              case 'equal':
                //We are looking for all the users ids that have a company name equal to the condition value
                const queryToFindUsers = await users.findAll({
                  attributes: ['id'],
                  include: [
                    {
                      required: true,
                      model: departments,
                      include: [
                        {
                          required: true,
                          model: companies,
                          where: { name: { [Op.eq]: value } },
                        },
                      ],
                    },
                  ],
                });
                //We map this array of objects to retrieve the user ids
                const userIds = queryToFindUsers.map((user) => user.id);
                return { id: { [Op.in]: userIds } };
              default:
                return null;
            }
          },
        },
      ],
      segments: [],
    });
    ```
  </Tab>

  <Tab title="Rails">
    ```ruby theme={null}
    class Forest::Customer
        include ForestLiana::Collection

        collection :User

        filter_company = lambda do |condition, where|
            company_value = condition['value']
            case condition['operator']
            when 'equal'
                "users.id IN (SELECT users.id
                FROM users
                JOIN departments ON departments.id = users.department_id
                JOIN companies ON companies.id = departments.company_id
                WHERE companies.name = '#{company_value}')"
            end
        end

        field :company, type: 'String', is_filterable: true, filter: filter_company do
          company = User.find(object.id).department.company
          "#{company.name}"
        end
    end
    ```
  </Tab>
</Tabs>

### **Step 2: Configure the scope in the UI**

In project settings:

<img src="https://mintcdn.com/forest/UDnqA5TqR2qMKTU8/images/legacy/javascript-agents/image%20(513).png?fit=max&auto=format&n=UDnqA5TqR2qMKTU8&q=85&s=391e5ea057acd5fe81857d064097ef9b" alt="" width="2000" height="783" data-path="images/legacy/javascript-agents/image (513).png" />

In the table `users`

<img src="https://mintcdn.com/forest/UDnqA5TqR2qMKTU8/images/legacy/javascript-agents/image%20(516).png?fit=max&auto=format&n=UDnqA5TqR2qMKTU8&q=85&s=5bc4f233c31c28fdbb407c067f89c47c" alt="" width="2000" height="596" data-path="images/legacy/javascript-agents/image (516).png" />
