权限组件之一(用户)

原创 2004年12月31日 13:19:00
首先,我定义了一个用户接口,可以从其中取出其的各种属性.代码如后面所示.用户除了各种不同的属性以外还必须设置其角色以及所属的群组.

    然后定义一个AbstractUserUser共性的东西进行处理.所有的取属性的方法都已实现.用户只要根据实现情况继承AbstractUser把自己要定义的属性进行处理即可.(因为每个系统的用户都会有不同的属性,所以留成抽象类供使用者自己扩展). 只要初始化变量description, name ,group ,id, prop,role,propMap即可.

    最后定义了一个类UserImpl来实现具体的User作随包的一个User供一般使用者使用.不建议直接使用UserImpl,因为以后的版本可能会重写该类.如果要使用的话可以把该类改名为自己的类即可.

 

    这部分涉及到了一个ResourceLib,该类中存是我自己定义的存储各种资源配置用的类,可以直接使用.

 

======================User.java===============================

package org.fswan.permission;

 

import org.fswan.Identity;

import java.util.Properties;

import org.fswan.workflow.exception.CantFoundIDException;

public interface User

{

    /**

     * 获取用户名

     * @return 用户名

     */

    public String getName();

    /**

     * 获取用户描述

     * @return 描述

     */

    public String getDescription();

    /**

     * 获取用户标识

     * @return 用户标识

     */

    public Identity getId();

    /**

     * 获取属性

     * @return 属性值

     */

    public Properties getProperties();

    /**

     * 获取所属组

     * @return 组列表

     */

    public Group[] getGroups() throws CantFoundIDException;

    /**

     * 获取所有角色

     * @return 角色数组

     */

    public Role[] getRoles() throws CantFoundIDException;

    /**

     * 获取用户用作权限判断的属性

     * @param prop 权限属性

     * @return 属性值

     */

    public Object getPermissionProp(String prop);

}

=======================AbstractUser===================================

package org.fswan.permission;

import java.util.HashMap;

import java.util.Properties;

 

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

/**

 *

 * 实现AbstractUser的类构造必须做的一些事

 * 初始化变量description,name,group,id,prop,role,propMap

 */

public class AbstractUser implements User

{

    /**

     * 描述

     */

    protected String description;

    /**

     * 名称

     */

    protected String name;

    /**

     * 所属的组的标识

     */

    protected Identity[] group;

    /**

     * 用户标识

     */

    protected Identity id;

    /**

     * 属性

     */

    protected Properties prop;

    /**

     * 角色

     */

    protected Identity[] role;

    /**

     * 权限属性存储的位置

     */

    protected HashMap propMap;

   

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getDescription()

     */

    public String getDescription()

    {

        return description;

    }

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getGroups()

     */

    public Group[] getGroups()

    {

        Group[] groups = new Group[group.length];

       for (int i = 0; i < groups.length; i++)

       {

           try

           {

              groups[i] = (Group) group[i].newInstance();

           } catch (IdentityMappingError e)

           {

               e.printStackTrace();

           }

       }

        return groups;

    }

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getId()

     */

    public Identity getId()

    {

        return id;

    }

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getName()

     */

    public String getName()

    {

        return name;

    }

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getProperties()

     */

    public Properties getProperties()

    {

        return prop;

    }

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getRoles()

     */

    public Role[] getRoles()

    {

      Role[] roles = new Role[role.length];

       for (int i = 0; i < roles.length; i++)

       {

           try

           {

               roles[i] = (Role) role[i].newInstance();

           } catch (IdentityMappingError e)

           {

               e.printStackTrace();

           }

       }

        return roles;

    }

    public String toString()

    {

        String retStr = id.getIdName();

        retStr += ":" + name;

        retStr += "   " + description + "/n";

        retStr += "Group:";

        Group[] groups = this.getGroups();

       if (groups != null)

       {

           for (int i = 0; i < groups.length; i++)

           {

               if (groups[i] != null)

                   retStr += groups[i].getId().getIdName() + "/t";

           }

       }

        Properties p = getProperties();

        Object[] obj = p.keySet().toArray();

       for (int i = 0; i < obj.length; i++)

       {

           retStr+=obj[i]+":"+p.getProperty(obj[i].toString())+"/n";

       }

        return retStr;

    }

   

    /* (non-Javadoc)

     * @see org.fswan.permission.User#getPermissionProp(java.lang.String)

     */

    public Object getPermissionProp(String prop)

    {

        return propMap.get(prop);

    }

 

}

==============================UserImpl.java===========================

package org.fswan.permission;

import java.util.ArrayList;

import java.util.Properties;

import javax.xml.parsers.DocumentBuilderFactory;

import org.fswan.Identity;

import org.fswan.IdentityImpl;

import org.fswan.ImplementIdentity;

import org.fswan.ResourceLib;

import org.fswan.workflow.exception.IdentityMappingError;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class XMLUser extends AbstractUser implements ImplementIdentity

{

    /**

     * XML中定义用户的标签

     */

    public static final String USER = "User";

    public Object newInstance(Identity id)

    {

        ArrayList sources = ResourceLib.getXmlResource();

       for (int i = 0; i < sources.size(); i++)

       {

           try

           {

               Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(sources.get(i).toString());

               NodeList nl = doc.getElementsByTagName(USER);

               for (int j = 0; j < nl.getLength(); j++)

               {

                   Element tempEl = (Element) nl.item(j);

                   String idStr = tempEl.getAttribute("id");

                  if (idStr != null && !idStr.equals(""))

                  {

                      if (idStr.equals(id.getIdName()))

                      {

                          this.id = new IdentityImpl(Identity.SWITCH, Identity.XMLUSER, idStr);

                          NodeList tempNl = tempEl.getElementsByTagName("Name");

                          name = tempNl.item(0).getChildNodes().item(0).getNodeValue();

                          tempNl = tempEl.getElementsByTagName("Description");

                          description = tempNl.item(0).getChildNodes().item(0).getNodeValue();

                          tempNl = tempEl.getElementsByTagName("ParentGroup");

                          Identity[] groups = new Identity[tempNl.getLength()];

                          for (int iGroup = 0; iGroup < groups.length; iGroup++)

                          {

                              Element tempEl2 = (Element) tempNl.item(iGroup);

                              String subType = tempEl.getAttribute("subType");

                              if(subType==null || subType.equals(""))subType = Identity.XMLGROUP;

                              groups[iGroup] = new IdentityImpl(Identity.GROUP, subType, tempEl2.getAttribute("id"));

                          }

                          this.group = groups;

                          tempNl = tempEl.getElementsByTagName("Role");

                          Identity[] roles = new Identity[tempNl.getLength()];

                          for (int iRole = 0; iRole < tempNl.getLength(); iRole++)

                          {

                              Element tempEl2 = (Element) tempNl.item(iRole);

                              String subType = tempEl.getAttribute("subType");

                              if(subType==null || subType.equals(""))subType = Identity.XMLROLE;

                              roles[iRole] = new IdentityImpl(Identity.ROLE, subType, tempEl2.getAttribute("id"));

                          }

                          this.role = roles;

                          this.prop = new Properties();

                          tempNl = tempEl.getElementsByTagName("Property");

                          if (tempNl != null)

                             for (int k = 0; k < tempNl.getLength(); k++)

                             {

                                 Element tempElement = (Element) tempNl.item(k);

                                 System.out.println(tempElement.getAttribute("name"));

                                 this.prop.setProperty(tempElement.getAttribute("name"), tempElement.getAttribute("value"));

                             }

                          return this;

                      }

                  }

               }

           } catch (Exception e)

           {

               e.printStackTrace();

           }

       }

        return null;

    }

    public static void main(String[] args)

    {

       try

       {

           ResourceLib.addResource("D://eclipse//workspace//workflow//workflow.xml");

           User u = (User) new IdentityImpl(Identity.USER, Identity.XMLUSER, "U01").newInstance();

           System.out.println(u);

       } catch (IdentityMappingError e)

       {

           e.printStackTrace();

       }

    }

}

 

========================XML格式=====================

<User id="U01">

      <Name>Swan</Name>

      <Description>方志文</Description>

      <ParentGroup id="G01"/>

       <Property name="SEX" value="male"/>

       <Property name="AGE" value="20"/>

     </User>

========================XML描述文件==================

    <xs:complexType name="User">

        <xs:annotation>

           <xs:documentation>用户名</xs:documentation>

        </xs:annotation>

        <xs:sequence>

           <xs:element name="Name"/>

           <xs:element name="Description"/>

           <xs:element name="ParentGroup" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

           <xs:element name="Role" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

           <xs:element name="Property" minOccurs="0" maxOccurs="unbounded">

               <xs:complexType>

                   <xs:attribute name="name" use="required"/>

                   <xs:attribute name="value" use="required"/>

               </xs:complexType>

           </xs:element>

        </xs:sequence>

        <xs:attribute name="id" use="required"/>

    </xs:complexType>

Asp.Net中Word,Excel等office com组件操作权限的问题

近日在打开原来写的一个网页程序运行时,出现了Excel操作权限的问题,具体的说就是在代码中调用下面这段与Excel操作有关的语句时,   Application curExcelApp = new ...
  • yuanbeng265
  • yuanbeng265
  • 2014年05月06日 16:33
  • 216

Excel COM组件使用的注意事项和一些权限问题

今天将写好的程序部署到服务器上,结果出了几个莫名其妙的问题,搞了一天,终于解决了 总的来说有以下几个需要注意的地方(以下问题均是在远程访问时才会出现) 1.实例化Excel的COM组件的时候,不要...
  • lllljz
  • lllljz
  • 2015年04月29日 15:06
  • 3188

权限管理组件的设计、开发思路

应用软件中通常包含用户的权限管理功能,往往不同应用系统对权限管理功能的需求不同,有自己的权限模型,权限的授权、鉴权策略。权限管理是相对独立的一个功能模块,由于功能需求不同、采用模型设计、实现技术等的不...
  • yan_dk
  • yan_dk
  • 2012年02月01日 16:50
  • 807

Vue2.0权限树组件

项目使用的饿了么的Element-Ui,权限树使用其树形控件: 刚开始没有特殊需求,三级分支,效果看着还可以。但是接下来的新需求:增加页面操作按钮权限,即达到四级分支,同时要求四级权限布局方...
  • archer119
  • archer119
  • 2017年06月10日 22:49
  • 2156

用户、角色和权限开发

角色、权限规划与开发 导言   最近花了一段时间在做权限开发者一块,从设计到编码,我都全程参与了,对权限开发也有了一个本质上的了解,权限管理作为一个系统最基本也是最重要的功能之一,在一个系统中是非常重...
  • u010004317
  • u010004317
  • 2017年01月03日 18:10
  • 5456

IIS调用COM组件的权限问题

情形1 问题描述 C#.NET编写了一个webservice的接口,供公司的的其他地方发送和接收短信(采用的方式是:再服务器上安装...
  • BleuRever
  • BleuRever
  • 2016年03月02日 21:15
  • 3512

asp.net 程序里面调用了excel组件,权限解决方案

在asp.net 程序里面调用了excel组件,但是将程序部署到iis里面会抛以下异常: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000...
  • zghnpdswyp
  • zghnpdswyp
  • 2016年09月27日 15:06
  • 568

权限资源经典配置【用户+角色+权限+部门】

经典权限配置(一对多、多对一、多对多)配置 部门实体映射配置文件:Department.hbm.xml ...
  • yangwenxue_admin
  • yangwenxue_admin
  • 2016年01月10日 17:23
  • 3628

用户、角色和权限

我感觉,虽然很多人都可以做出一个成员资格管理的模块,但是能做的好的并不是很多。其中,有对这个成员管理原理不清楚的,也有实现能力不强的,等等。我觉得,要想做好成员资格管理,首先必须对成员资格管理的概念和...
  • u012259492
  • u012259492
  • 2014年06月06日 18:12
  • 6904

关于用户角色权限的一点想法

前言:权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实际情况和具体架构,在维...
  • cngkqy
  • cngkqy
  • 2006年10月28日 16:23
  • 1236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:权限组件之一(用户)
举报原因:
原因补充:

(最多只允许输入30个字)