权限组件之三(角色)

原创 2004年12月31日 13:24:00
首先,我定义了一个角色接口,可以从其中取出其的各种属性.代码如后面所示.

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

 

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

 

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

 

======================Role.java===============================

package org.fswan.permission;

import org.fswan.Identity;

import java.util.Properties;

import org.fswan.workflow.exception.CantFoundIDException;

public interface Role

{

    /**

     * 获取角色ID

     * @return

     */

    public Identity getId();

    /**

     * 获取角色的名称

     * @return 名称

     */

    public String getName();

    /**

     * 获取角色的描述

     * @return 描述

     */

    public String getDescription();

    /**

     * 获取角色的所有的用户()

     * @return 用户

     */

    public User[] getUsers() throws CantFoundIDException;

    /**

     * 角色的属性

     * @return 属性值

     */

    public Properties getProperties();

   

    /**

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

     * @param prop 权限属性

     * @return 属性值

     */

    public Object getPermissionProp(String prop);

}

=======================AbstractRole===================================

package org.fswan.permission;

 

import java.util.HashMap;

import java.util.Properties;

 

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

 

public class AbstractRole implements Role

{

    /**

     * 描述

     */

    protected String description ;

    /**

     * 名称

     */

    protected String name;

    /**

     * 标识

     */

    protected Identity id;

    /**

     * 属性

     */

    protected Properties prop;

    /**

     * 该角色所有用户的标识

     */

    protected Identity[] users;

    /**

     * 权限属性表

     */

    protected HashMap permissionMap;

    /* (non-Javadoc)

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

     */

    public String getDescription()

    {

        return description;

    }

 

    /* (non-Javadoc)

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

     */

    public Identity getId()

    {

        return id;

    }

 

    /* (non-Javadoc)

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

     */

    public String getName()

    {

        return name;

    }

 

    /* (non-Javadoc)

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

     */

    public Properties getProperties()

    {

        return prop;

    }

 

    /* (non-Javadoc)

     * @see org.fswan.permission.Role#getUsers()

     */

    public User[] getUsers()

    {

      User[] retUser = new User[users.length];

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

       {

           try

           {

               retUser[i] = (User)users[i].newInstance();

           } catch (IdentityMappingError e)

           {

               e.printStackTrace();

           }

       }

        return retUser;

    }

   

    public String toString()

    {

        String retStr = id.getIdName();

        retStr +=":"+name;

        retStr += "   "+description;

        return retStr;

    }

 

    /* (non-Javadoc)

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

     */

    public Object getPermissionProp(String prop)

    {

        return permissionMap.get(prop);      

    }

 

}

==============================XMLRole.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;

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.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class XMLRole extends AbstractRole implements ImplementIdentity

{

    /**

     * XML标签用的字符串

     */

    public static final String ROLE = "Role";

    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(ROLE);

               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.XMLROLE,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();

                                                                                                      

                          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);

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

                          }

                         

                          return this;

                      }

                  }

               }

           } catch (Exception e)

           {

               e.printStackTrace();

           }

       }

        return null;

    }

   

}

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

   <Role id="R01">

       <Name>系统管理员</Name>

      <Description>系统管理员</Description>

   </Role>

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

    <xs:complexType name="Role">

        <xs:annotation>

           <xs:documentation>角色名</xs:documentation>

        </xs:annotation>

        <xs:sequence>

           <xs:element name="Name"/>

           <xs:element name="Description"/>

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

        </xs:sequence>

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

    </xs:complexType>

 

用户、角色和权限开发

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

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

前言:权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实际情况和具体架构,在维...
  • cngkqy
  • cngkqy
  • 2006年10月28日 16:23
  • 1236

用户、角色和权限

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

权限,角色,分组,部门

资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限权限概念权限是对资源的一种保护访问.用户要访问A资源前提是用户必须有A资源的访问权限.角色概念实事上...
  • shaokun305
  • shaokun305
  • 2005年01月25日 12:57
  • 5481

用户·角色·权限·表

一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计。        权限系统一直以来是我们应用系统不可缺...
  • angel20082008
  • angel20082008
  • 2014年06月14日 15:25
  • 49415

shiro实现基于角色的权限授权

shiro除了登陆验证之外,还有一点就是对系统进行相应的权限操作,而基于角色的授权是目前最通用的做法,也是符合业务逻辑的。具体思路如下: 1.数据库设计好权限表,角色表(权限标识是自定义的,shir...
  • chengxuzaza
  • chengxuzaza
  • 2017年06月03日 13:22
  • 2125

用户角色权限数据库设计实例

为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码...
  • suzhouhe1991
  • suzhouhe1991
  • 2016年04月21日 23:15
  • 3238

基于角色的权限设计(一)

在任何系统中,权限设计是最基础的东西,本文给出一个基于角色的权限设计的循序渐进的设计方案。   在权限系统中,功能(权限)是最小的单位,比如起草新闻、编辑新闻、审核新闻、删除新闻等,而角色是一类功能...
  • snomyc
  • snomyc
  • 2014年08月19日 10:02
  • 8340

用户、角色、权限管理-设计方案之权限检测

 在管理软件系统设计中,用户、角色、权限管理是不可缺少的三部分,三者具有如下关系:User : Role = 1 : nRole : Permission = 1 : n如将权限控制到具体的功能模块,...
  • windok2004
  • windok2004
  • 2008年05月25日 21:13
  • 873

resource角色的权限

查看RESOURCE角色的权限(系统权限,对象权限): Select* from role_sys_privswhere role='RESOURCE'; ROLE                  ...
  • qq_26222859
  • qq_26222859
  • 2016年08月04日 14:39
  • 1882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:权限组件之三(角色)
举报原因:
原因补充:

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