权限组件(续二)

21 篇文章 0 订阅
20 篇文章 2 订阅

这是我完成的数据库的实现,在DBPermission里的main方法实现,数据库为Postgresql,连接在dbpermission里可以修改成相应的.

用户,群组,角色,权限分别存储在tbluser,tblgroup,tblrole,tblpermission里,它们之间的关系在tblx1x2里,比如用户与群组的关系在tblgroupuser,依此类推.


=========DBGroup.java================
package org.fswan.permission.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Properties;

import org.fswan.Identity;
import org.fswan.IdentityImpl;
import org.fswan.ImplementIdentity;
import org.fswan.exception.IdentityMappingError;
import org.fswan.permission.AbstractGroup;
import org.fswan.permission.Group;
import org.fswan.permission.Role;
import org.fswan.permission.User;

/**
 * @author Swan Fong(方志文)
 * E-mail: fswan@yeah.net
 * Site: http://blog.csdn.net/fswan
 * 2005-1-3
 */
    public class DBGroup extends AbstractGroup implements ImplementIdentity
    {
     public Object newInstance(Identity id)
     {
         prop= new Properties();
         propMap = new HashMap();
         role = new Identity[1];
            this.group = new Identity[1];
         try {
                Connection conn = DBPermission.getConnection();
                Statement st = conn.createStatement();
                ResultSet rs = st.executeQuery("select * from tblgroup where id = "+id.getIdName());
                if(rs.next())
                {
                    this.id = id;
                    this.name = rs.getString("name");
                    this.description = rs.getString("description");
                    int props = rs.getMetaData().getColumnCount();
                    for (int i = 0; i < props; i++) {
                        prop.setProperty(rs.getMetaData().getColumnName(i+1),rs.getString(i+1));
                    }
                }
//初始化父群组
       rs = st.executeQuery("select count(*) from tblgroupgroup where child_id = " + id.getIdName());
       if (rs.next())
       {
        this.group = new Identity[rs.getInt(1)];
       }
       rs = st.executeQuery("select * from tblgroupgroup where child_id = " + id.getIdName());
       int i = 0;
       while (rs.next())
       {
        group[i] = new IdentityImpl(Identity.GROUP, "DBGroup", rs.getString("parent_id"));
        i++;
       }
//初始子群组
       rs = st.executeQuery("select count(*) from tblgroupgroup where parent_id = " + id.getIdName());
       if (rs.next())
       {
        this.subGroup = new Identity[rs.getInt(1)];
       }
       rs = st.executeQuery("select * from tblgroupgroup where parent_id = " + id.getIdName());
       i = 0;
       while (rs.next())
       {
        subGroup[i] = new IdentityImpl(Identity.GROUP, "DBGroup", rs.getString("child_id"));
        i++;
       }
//初始化用户
       rs = st.executeQuery("select count(*) from tblgroupuser where group_id = " + id.getIdName());
       if (rs.next())
       {
        this.user = new Identity[rs.getInt(1)];
       }
       rs = st.executeQuery("select * from tblgroupuser where group_id = " + id.getIdName());
       i = 0;
       while (rs.next())
       {
        user[i] = new IdentityImpl(Identity.GROUP, "DBUser", rs.getString("user_id"));
        i++;
       }
//角色
       rs = st.executeQuery("select count(*) from tblgrouprole where group_id="+id.getIdName());
       if(rs.next())
       {
        role = new Identity[rs.getInt(1)];
       }
       rs = st.executeQuery("select * from tblgrouprole where group_id="+id.getIdName());
       i = 0;
       while(rs.next())
       {
        role[i] = new IdentityImpl(Identity.ROLE,"DBRole",rs.getString("role_id"));
        i++;
       }
       
                conn.close();
                return this;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
     }
     public static void main(String[] args)
     {
      try {
                Class.forName("org.fswan.permission.db.DBPermission");
                IdentityImpl id = new IdentityImpl(Identity.GROUP,"DBGroup","1");
                DBGroup group = (DBGroup)id.newInstance();
                User[] users = group.getUsers();
                Group[] groups = group.getGroups();
                Group[] subGroup = group.getSubGroup();
                Role[] role = group.getRoles();
               
                for (int i = 0; i < users.length; i++)
    {
     System.out.println("==============");
     System.out.println(users[i]);
    }
                for (int i = 0; i < groups.length; i++)
    {
     System.out.println("===================");
     System.out.println(groups[i]);
    }
                for (int i = 0; i < subGroup.length; i++)
    {
                 System.out.println("================");
     System.out.println(subGroup[i]);
    }
    for (int i = 0; i < role.length; i++)
    {
     System.out.println("====================");
     System.out.println(role[i]);
    }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IdentityMappingError e) {
                e.printStackTrace();
            }
     }
    }
==========DBPermission.java==================
/*
 * Created on 2005-1-3
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.fswan.permission.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;

import org.fswan.Identity;
import org.fswan.IdentityImpl;
import org.fswan.ImplementIdentity;
import org.fswan.exception.IdentityMapHadExist;
import org.fswan.exception.IdentityMappingError;
import org.fswan.permission.Permission;
import org.fswan.permission.Rule;
import org.fswan.permission.RuleImpl;
import org.fswan.permission.User;

/**
 * @author Swan Fong(方志文)
 * E-mail: fswan@yeah.net Site:
 * http://blog.csdn.net/fswan
 * 2005-1-3
 * 权限名和子权限名不能包含:(冒号),属性用分号分隔,类型为contain
 */
public class DBPermission extends Permission implements ImplementIdentity {
 public static final String DBGROUP = "DBGroup";
 public static final String DBUSER = "DBUser";
 public static final String DBROLE = "DBRole";
 public static final String DBPERMISSION = "DBPermission";
 
 static
 {
  try
  {
   IdentityImpl.register("DBGroup", "org.fswan.permission.db.DBGroup");
  } catch (IdentityMapHadExist e)
  {
   System.out.println("DBGroup had registered");
  }
  try
  {
   IdentityImpl.register("DBUser", "org.fswan.permission.db.DBUser");
  } catch (IdentityMapHadExist e)
  {
   System.out.println("DBUser had registered");
  }
  try
  {
   IdentityImpl.register("DBRole", "org.fswan.permission.db.DBRole");
  } catch (IdentityMapHadExist e)
  {
   System.out.println("DBRole had registered");
  }
  try
  {
   IdentityImpl.register("DBPermission", "org.fswan.permission.db.DBPermission");
  } catch (IdentityMapHadExist e)
  {
   System.out.println("DBPermission had registered");
  }
 }

 public static Connection getConnection()
 {
  try
  {
   Class.forName("org.postgresql.Driver");
   return DriverManager.getConnection("jdbc:postgresql://localhost:5432/hrms", "sa", "760522");
  } catch (ClassNotFoundException e)
  {
   e.printStackTrace();
  } catch (SQLException e)
  {
   e.printStackTrace();
  }
  return null;
 }

 /* (non-Javadoc)
  * @see org.fswan.ImplementIdentity#newInstance(org.fswan.Identity)
  */
 public Object newInstance(Identity identity)
 {
     try {
            Connection conn = DBPermission.getConnection();
            Statement st = conn.createStatement();
            String sql = null;
            if(identity.getIdName().indexOf(":")!=-1)
            {
             String name = identity.getIdName();
    String subName = name.substring(name.indexOf(":")+1);
    name = name.substring(0,name.indexOf(":"));
             sql = "select * from tblpermission where subname ='"+subName+"' and name = '"+name+"' and /"type/" = 'contain'";
            }else
            {
             sql = "select * from tblpermission where subname is null and name = '"+identity.getIdName()+"' and /"type/" = 'contain'";
            }
            ResultSet rs = st.executeQuery(sql);
            if(rs.next())
            {
                permission = rs.getString("name");
                subPermission = rs.getString("subname");
                String props = rs.getString("property");
                if(props!=null)
                {
                 prop = new ArrayList();
                 String[] items = props.split(";");
                 for (int i = 0; i < items.length; i++)
     {
      prop.add(items);
     }
                }
                conn.close();
                return this;
            }
     }catch(SQLException e)
  {
      e.printStackTrace();
  }
  return null;
 }

 /* (non-Javadoc)
  * @see org.fswan.permission.Permission#getDenyRule()
  */
 public Rule[] getDenyRule()
 {
  return null;
 }

 /* (non-Javadoc)
  * @see org.fswan.permission.Permission#getAcceptRule()
  */
 public Rule[] getAcceptRule()
 {
  return new Rule[]{new RuleImpl()};
 }
 
 public static void main(String[] args)
 {
  Identity id = new IdentityImpl(Identity.PERMISSION,"DBPermission","spc.machine");
  try
  {
   Permission p = (Permission)id.newInstance();
   Identity id2 = new IdentityImpl(Identity.USER,"DBUser","2");
   User user = (User)id2.newInstance();
   System.out.println(p);
   System.out.println(user);
   HashMap oldData = new HashMap();
   oldData.put("department","1");
   System.out.println(p.hasPermission(user,oldData,null));
  } catch (IdentityMappingError e)
  {
   e.printStackTrace();
  }
 }
}

========================DBRole.java=================
/*
 * Created on 2004-4-21
 *
 * To change the template for this generated file go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
package org.fswan.permission.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Properties;

import org.fswan.Identity;
import org.fswan.IdentityImpl;
import org.fswan.ImplementIdentity;
import org.fswan.exception.IdentityMappingError;
import org.fswan.permission.AbstractRole;
import org.fswan.permission.User;

/**
 * @author Swan Fong(方志文)
 * E-mail: fswan@yeah.net
 * Site: http://blog.csdn.net/fswan
 * 2005-1-3
 */
public class DBRole extends AbstractRole implements ImplementIdentity {
 public Object newInstance(Identity id)
 {
  prop = new Properties();
  try
  {
   permissionMap = new HashMap();
   Connection conn = DBPermission.getConnection();
   Statement st = conn.createStatement();
   ResultSet rs = st.executeQuery("select * from tblrole where id = " + id.getIdName());
   if (rs.next())
   {
    this.id = id;
    this.name = rs.getString("name");
    this.description = rs.getString("description");
    int props = rs.getMetaData().getColumnCount();
    for (int i = 0; i < props; i++)
    {
     prop.setProperty(rs.getMetaData().getColumnName(i + 1), rs.getString(i + 1));
    }
   }
   //          初始化用户
   int userNum = 0;
   rs = st.executeQuery("select count(*) from tblgrouprole where role_id = " + id.getIdName());
   if (rs.next())
   {
    userNum = rs.getInt(1);
   }
   rs = st.executeQuery("select count(*) from tbluserrole where role_id = " + id.getIdName());
   if (rs.next())
   {
    userNum += rs.getInt(1);
   }
   users = new Identity[userNum];
   //群组   
   rs = st.executeQuery("select * from tblgrouprole where role_id = " + id.getIdName());
   int i = 0;
   while (rs.next())
   {
    users[i] = new IdentityImpl(Identity.GROUP, "DBGroup", rs.getString("group_id"));
    i++;
   }
   rs = st.executeQuery("select * from tbluserrole where role_id = " + id.getIdName());
   while (rs.next())
   {
    users[i] = new IdentityImpl(Identity.USER, "DBUser", rs.getString("user_id"));
    i++;
   }
   //权限属性
   rs = st.executeQuery("select * from tblrolepermission where role_id=" + id.getIdName());
   while (rs.next())
   {
    String pro = rs.getString("properties");
    String permission = rs.getString("permission");
    Properties tmpP = new Properties();
    ArrayList tmpA = null;
    if (permissionMap.get(permission) != null)
    {
     tmpA = (ArrayList) permissionMap.get(permission);
    } else
    {
     tmpA = new ArrayList();
     permissionMap.put(permission, tmpA);
    }
    if (pro != null)
    {
     String[] tmpArray = pro.split(":");
     for (int j = 0; j < tmpArray.length-1; j += 2)
     {
      tmpP.setProperty(tmpArray[j], tmpArray[j + 1]);
     }
    }
    tmpA.add(tmpP);
   }
   conn.close();
   return this;
  } catch (SQLException e)
  {
   e.printStackTrace();
  }
  return null;
 }

 public static void main(String[] args)
 {
  try
  {
   Class.forName("org.fswan.permission.db.DBPermission");
   IdentityImpl id = new IdentityImpl(Identity.ROLE, "DBRole", "2");
   DBRole role = (DBRole) id.newInstance();
   System.out.println(role);
   User[] users = role.getUsers();
   for (int i = 0; i < users.length; i++)
   {
    System.out.println("===============");
    System.out.println(users[i]);
   }
  } catch (ClassNotFoundException e)
  {
   e.printStackTrace();
  } catch (IdentityMappingError e)
  {
   e.printStackTrace();
  }
 }
}
=================DBUser.java==============
/*
 * Created on 2005-1-3
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.fswan.permission.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Properties;

import org.fswan.Identity;
import org.fswan.IdentityImpl;
import org.fswan.ImplementIdentity;
import org.fswan.exception.IdentityMappingError;
import org.fswan.permission.AbstractUser;

/**
 * @author Swan Fong(方志文)
 * E-mail: fswan@yeah.net
 * Site: http://blog.csdn.net/fswan
 * 2005-1-3
 * 初始化了id,name,description,role,group,properties等属性,propMap没初始化.此包中不使用此属性
 */
public class DBUser extends AbstractUser implements ImplementIdentity {
 public Object newInstance(Identity id)
 {
  prop = new Properties();
  propMap = new HashMap();
  try
  {
   Connection conn = DBPermission.getConnection();
   Statement st = conn.createStatement();
   ResultSet rs = st.executeQuery("select * from tbluser where id = " + id.getIdName());
   if (rs.next())
   {
    this.id = id;
    this.name = rs.getString("name");
    this.description = rs.getString("description");
    int props = rs.getMetaData().getColumnCount();
    for (int i = 0; i < props; i++)
    {
     prop.setProperty(rs.getMetaData().getColumnName(i + 1), rs.getString(i + 1));
    }
   }
   rs = st.executeQuery("select count(*) from tblgroupuser where user_id = " + id.getIdName());
   if (rs.next())
   {
    this.group = new Identity[rs.getInt(1)];
   }
   rs = st.executeQuery("select * from tblgroupuser where user_id = " + id.getIdName());
   int i = 0;
   while (rs.next())
   {
    group[i] = new IdentityImpl(Identity.GROUP, "DBGroup", rs.getString("group_id"));
    i++;
   }
   rs = st.executeQuery("select count(*) from tbluserrole where user_id="+id.getIdName());
   if(rs.next())
   {
    role = new Identity[rs.getInt(1)];
   }
   rs = st.executeQuery("select * from tbluserrole where user_id="+id.getIdName());
   i = 0;
   while(rs.next())
   {
    role[i] = new IdentityImpl(Identity.ROLE,"DBRole",rs.getString("role_id"));
    i++;
   }
   conn.close();
   return this;
  } catch (SQLException e)
  {
   e.printStackTrace();
  }
  return null;
 }

 public static void main(String[] args)
 {
  try
  {
   Class.forName("org.fswan.permission.db.DBPermission");
   IdentityImpl id = new IdentityImpl(Identity.USER, "DBUser", "1");
   System.out.println(id.newInstance());
  } catch (ClassNotFoundException e)
  {
   e.printStackTrace();
  } catch (IdentityMappingError e)
  {
   e.printStackTrace();
  }
 }
}
===============SQL ================
CREATE TABLE tblgroup
(
  id serial NOT NULL,
  name varchar(80),
  description varchar(400),
  manager varchar(20)
)


CREATE TABLE tblgroupgroup
(
  id serial NOT NULL,
  parent_id int4 NOT NULL,
  child_id int4 NOT NULL
)
CREATE TABLE tblgrouprole
(
  id serial NOT NULL,
  group_id int4 NOT NULL,
  role_id int4 NOT NULL
)
CREATE TABLE tblgroupuser
(
  id serial NOT NULL,
  user_id int4 NOT NULL,
  group_id int4 NOT NULL
)

CREATE TABLE tblpermission
(
  id serial NOT NULL,
  name varchar(50) NOT NULL,
  subname varchar(50),
  property varchar(2000),
  "type" varchar(200) NOT NULL
)
CREATE TABLE tblrole
(
  id serial NOT NULL,
  name varchar(50) NOT NULL,
  description varchar(200)
)
CREATE TABLE tblrolepermission
(
  id serial NOT NULL,
  role_id int4 NOT NULL,
  permission varchar(400) NOT NULL,
  properties varchar(2000)
)
CREATE TABLE tbluser
(
  id serial NOT NULL,
  name varchar(50) NOT NULL,
  description varchar(400),
  email varchar(50),
  mobile varchar(50)
)
CREATE TABLE tbluserrole
(
  id serial NOT NULL,
  user_id int4 NOT NULL,
  role_id int4 NOT NULL
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值