Package com.taobao.zeus.store.mysql

Source Code of com.taobao.zeus.store.mysql.MysqlPermissionManager

package com.taobao.zeus.store.mysql;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.taobao.zeus.store.GroupBean;
import com.taobao.zeus.store.GroupManager;
import com.taobao.zeus.store.JobBean;
import com.taobao.zeus.store.PermissionManager;
import com.taobao.zeus.store.Super;
import com.taobao.zeus.store.mysql.persistence.PermissionPersistence;
@SuppressWarnings("unchecked")
public class MysqlPermissionManager extends HibernateDaoSupport implements PermissionManager{
  @Autowired
  @Qualifier("groupManager")
  private GroupManager groupManager;
  @Override
  public Boolean hasGroupPermission(final String user, final String groupId) {
    if(Super.getSupers().contains(user)){
      //超级管理员
      return true;
    }
    Set<String> groups=new HashSet<String>();
    GroupBean gb=groupManager.getUpstreamGroupBean(groupId);
    if(user.equals(gb.getGroupDescriptor().getOwner())){
      //组所有人
      return true;
    }
    while(gb!=null){
      groups.add(gb.getGroupDescriptor().getId());
      gb=gb.getParentGroupBean();
    }
    Set<String> users=new HashSet<String>();
    for(String g:groups){
      users.addAll(getGroupAdmins(g));
    }
    return users.contains(user)?true:false;
  }
 
  public List<String> getGroupAdmins(final String groupId){
    return (List<String>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("select uid from com.taobao.zeus.store.mysql.persistence.PermissionPersistence where type=? and targetId=?");
        query.setParameter(0, PermissionPersistence.GROUP_TYPE);
        query.setParameter(1, Long.valueOf(groupId));
        return query.list();
      }
    });
  }
  public List<String> getJobAdmins(final String jobId){
    return (List<String>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("select uid from com.taobao.zeus.store.mysql.persistence.PermissionPersistence where type=? and targetId=?");
        query.setParameter(0, PermissionPersistence.JOB_TYPE);
        query.setParameter(1, Long.valueOf(jobId));
        return query.list();
      }
    });
  }
 
  private PermissionPersistence getGroupPermission(final String user,final String groupId){
    List<PermissionPersistence> list=(List<PermissionPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.PermissionPersistence where type=? and uid=? and targetId=?");
        query.setParameter(0,PermissionPersistence.GROUP_TYPE);
        query.setParameter(1, user);
        query.setParameter(2, Long.valueOf(groupId));
        return query.list();
      }
    });
    if(list!=null && !list.isEmpty()){
      return list.get(0);
    }
    return null;
  }
  private PermissionPersistence getJobPermission(final String user,final String jobId){
    List<PermissionPersistence> list=(List<PermissionPersistence>) getHibernateTemplate().execute(new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.PermissionPersistence where type=? and uid=? and targetId=?");
        query.setParameter(0,PermissionPersistence.JOB_TYPE);
        query.setParameter(1, user);
        query.setParameter(2, Long.valueOf(jobId));
        return query.list();
      }
    });
    if(list!=null && !list.isEmpty()){
      return list.get(0);
    }
    return null;
  }
  @Override
  public void addGroupAdmin(String user,String groupId) {
    boolean has=getGroupPermission(user, groupId)==null?false:true;
    if(!has){
      PermissionPersistence pp=new PermissionPersistence();
      pp.setType(PermissionPersistence.GROUP_TYPE);
      pp.setUid(user);
      pp.setTargetId(Long.valueOf(groupId));
      pp.setGmtModified(new Date());
      getHibernateTemplate().save(pp);
    }
  }
  @Override
  public void addJobAdmin(String user, String jobId) {
    boolean has=getJobPermission(user, jobId)==null?false:true;
    if(!has){
      PermissionPersistence pp=new PermissionPersistence();
      pp.setType(PermissionPersistence.JOB_TYPE);
      pp.setUid(user);
      pp.setTargetId(Long.valueOf(jobId));
      pp.setGmtModified(new Date());
      getHibernateTemplate().save(pp);
    }
  }
  @Override
  public Boolean hasJobPermission(String user, String jobId) {
    if(Super.getSupers().contains(user)){
      //超级管理员
      return true;
    }
    Set<String> groups=new HashSet<String>();
    JobBean jobBean=groupManager.getUpstreamJobBean(jobId);
    if(user.equals(jobBean.getJobDescriptor().getOwner())){
      //任务所有人
      return true;
    }
    GroupBean gb=jobBean.getGroupBean();
    while(gb!=null){
      groups.add(gb.getGroupDescriptor().getId());
      gb=gb.getParentGroupBean();
    }
    Set<String> users=new HashSet<String>();
    users.addAll(getJobAdmins(jobId));
    for(String g:groups){
      users.addAll(getGroupAdmins(g));
    }
    return users.contains(user)?true:hasGroupPermission(user, groupManager.getJobDescriptor(jobId).getX().getGroupId());
  }
  @Override
  public void removeGroupAdmin(String user, String groupId) {
    PermissionPersistence pp=getGroupPermission(user, groupId);
    if(pp!=null){
      getHibernateTemplate().delete(pp);
    }
  }
  @Override
  public void removeJobAdmin(String user, String jobId) {
    PermissionPersistence pp=getJobPermission(user, jobId);
    if(pp!=null){
      getHibernateTemplate().delete(pp);
    }
  }

}
TOP

Related Classes of com.taobao.zeus.store.mysql.MysqlPermissionManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.