整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

MySQL数据库字段级权限设计

一、 引言

二、 方案

方案二

方案三

对外权限分配接口

存在的问题

三、 代码

最初是打算在Spring Aop的前置通知中通过修改目标方法参数来实现,但是通过源码发现封装目标方法参数的类是用final修饰的,所以后面换了种思路。

使用Spring的ator自动代理实现,思路是通过条件判断决定是否要使用自动代理,要使用代理的话,就需要自己实现接口并重写其中invoke方法。

下面我贴出核心代码,文章最后会给出整个demo的链接

继承ator类,重写()方法

public class BeanTypeAutoProxyCreator extends AbstractAutoProxyCreator {
    @Override
    protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, 
        String beanName, TargetSource customTargetSource) throws BeansException {
        return isMatch(beanClass) ? PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS : DO_NOT_PROXY;
    }
    /**
     * 判断是否是需要被代理的对象
     * @param clazz 代理对象的类型
     * @return
     */
    private boolean isMatch(Class clazz) {
        //有两个Class类型的类象,一个是调用isAssignableFrom方法的类对象(后称对象a),
        // 以及方法中作为参数的这个类对象(称之为对象b),这两个对象如果满足以下条件则返回true,否则返回false:
        
        //a对象所对应类信息是b对象所对应的类信息的父类或者是父接口,简单理解即a是b的父类或接口

权限库表数据设计怎么做_数据库 权限表设计_权限管理表数据库设计

//a对象所对应类信息与b对象所对应的类信息相同,简单理解即a和b为同一个类或同一个接口 if (BaseMapper.class.isAssignableFrom(clazz)) { return true; } return false; } }

实现接口,重写invoke()方法

public class MyMethodInterceptor implements MethodInterceptor {
    @Autowired
    private SysAccess sysAccess;
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        // 权限封装类
        SysAccessCriteria result = null;
        int flag = -1;
        // 目标方法的参数
        Object[] args = invocation.getArguments();
        for (int i=0; i数据库 权限表设计_权限库表数据设计怎么做_权限管理表数据库设计

if(flag >= 0 && result != null){ args[flag] = result; } // 执行目标方法 Object object = invocation.proceed(); return object; } }

配置到Spring配置文件中



    
    
        
            myMethodInterceptor
        
    

Demo完整代码(数据库文件在目录下):

单纯个人设计,应该有很多不足,有不好的地方可以指出,或者有更好的想法可以评论,一起交流。

参考: