Проснись и узнай о масштабах власти


Если вы следуете фреймворку Permission Scope dataScope Overview

  • TLDR; фасеты + аннотации + локаторы mybatis (соответствуют 4 файлам DataScopeAspect.java, SysUserServiceImpl.java, SysUserMapper.xml и свойству params.dataScope в BaseEntity.java) ps: Официальный сайт Ruoyi: https://ruoyi.vip/

0. Класс BaseEntity имеет свойство params, в котором может храниться инжектируемый sql.

    private Map<String, Object> params; ``...

1. DataScopeAspect определяет фасеты

Класс DataScopeAspect, определяющий пять диапазонов разрешений, соответствует тому, как назначаются разрешения на данные для роли

DATA_SCOPE_ALL = "1" // Все разрешения на работу с данными
DATA_SCOPE_CUSTOM = "2"; // Пользовательские привилегии на данные
DATA_SCOPE_DEPT = "3"; //Права на ведомственные данные
DATA_SCOPE_DEPT_AND_CHILD = "4"; //Права на данные от отдела и ниже
DATA_SCOPE_SELF = "5"; //Права только на персональные данные
``

//Если пользователь не является администратором if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())

//Выполняем метод фильтрации разрешений dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)

//В соответствии с ролями пользователя user (возможно использование нескольких ролей) находим тип области разрешения каждой роли, судим, а затем добавляем sql-оператор. // цикл // наконец, получить необходимость добавления sqlString for (SysRole role : user.getRoles())

// окончательное суждение, если sqlString не является null if (StringUtils.isNotBlank(sqlString.toString())))))

//и аргументами метода являются типы/подтипы BaseEntity (если есть новые типы, добавьте их сюда) if (StringUtils.isNotNull(params) && params instanceof BaseEntity)

// то присваиваем sqlString свойству params.dataScope класса params baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + “)”);

``

2. Метод SysUserServiceImpl selectUserList пишет аннотацию

    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<SysUser> selectUserList(SysUser user)
    {
        return userMapper.selectUserList(user);
    }
``

## 3. В SysUserMapper.xml пропишите ${params.dataScope} в соответствующем месте в selectUserList.

- Что вы имеете в виду под соответствующим местом?
  Оператор вставки является условным оператором AND, поэтому он должен находиться между операторами where, order by и т.д., иначе sql будет выполняться с ошибкой.

Резюме:

    1. в mybatis отметить место, которое необходимо добавить;
    1. в аннотации метода отметить псевдонимы sys_dept, sys_user (для использования при сращивании sqlString в DataScopeAspect)