使用hibernate拦截器为数据添加部门层级代码

使用hibernate拦截器为数据添加部门层级代码

在实际业务中,常常需要使用到数据权限,即只有上级部门和本部门的人可以看到相对应的数据,兄弟部门和子部门则无法看到数据。为实现这个需求,尝试为每条数据添加部门层级代码,以后每次用户查询的时候都会根据用户部门来查询出可以查看的数据。

继承EmptyInterceptor

继承org.hibernate.EmptyInterceptor,重写EmptyInterceptor的方法。EmptyInterceptor这个拦截里可以拦截到数据库的操作,因为我们这里只需要在保存的时候加上用户的部门层级代码,所以只需要实现onSave即可。
示例代码:

public class HibernateInterceptor extends EmptyInterceptor {

    @Override
    public boolean onSave(Object object, Serializable serializable, Object[] objects, String[] propertyName, Type[] types) throws CallbackException {
        SysUser currentUser = SecurityUtils.getCurrentUser();
        if (object instanceof BaseEntity && currentUser != null){
            for (int i=0; i < propertyName.length; i++){
                if (StringUtils.equals(propertyName[i], "createDeptLevelCode")){
                    objects[i] = currentUser.getSysDept().getDeptLevelCode();
                }
            }
            return true;
        }
        return false;
    }
}

其他没有用的方法就不需要重写了,否则在不理解的情况下会导致数据的操作出问题。

配置拦截器

因为我使用的是springboot,配置这个比较方便,只需要在配置文件里面加上即可

spring.jpa.properties.hibernate.ejb.interceptor=org.copyleft.demo.core.handler.HibernateInterceptor

你可能感兴趣的:(hibernate)