权限组件之二(群组)

原创 2004年12月31日 13:21:00
首先,我定义了一个群组接口,除了继承用户的方法以外还有两个方法,getUsers,getSubGroup.代码如后面所示.用户除了各种不同的属性以外还必须设置其角色以及所属的群组.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

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

 

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

 

======================Group.java===============================

package org.fswan.permission;

public interface Group extends User

{

    /**

     * 获取组下所有的用户

     * @return 用户数组

     */

    public User[] getUsers();

    /**

     * 获取组下属的组

     * @return 组的数组

     */

    public Group[] getSubGroup();

}

=======================AbstractGroup===================================

package org.fswan.permission;

 

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

public class AbstractGroup extends AbstractUser implements Group

{

    protected Identity[] subGroup;

    protected Identity[] user;

    /* (non-Javadoc)

     * @see org.fswan.permission.Group#getSubGroup()

     */

    public Group[] getSubGroup()

    {

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

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

       {

           try

           {

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

           } catch (IdentityMappingError e)

           {

               e.printStackTrace();

           }

       }

        return groups;

    }

 

    /* (non-Javadoc)

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

     */

    public User[] getUsers()

    {

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

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

       {

           try

           {

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

           } catch (IdentityMappingError e)

           {

               e.printStackTrace();

           }

       }

        return users;

    }

    public String toString()

    {

        String retStr = id.getIdName();

        retStr +=":"+name;

        retStr += "   "+description;

        return retStr;

    }

}

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

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

 

public class XMLGroup extends AbstractGroup implements ImplementIdentity

{

    /**

     * XML中定义群组的标签

     */

    public static final String GROUP = "Group";

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

               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.XMLGROUP,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 < tempNl.getLength(); iGroup++)

                          {

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

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

                          }

                          this.subGroup = groups;

                          //加载角色

                          tempNl = tempEl.getElementsByTagName("Role");

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

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

                          {

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

                              roles[iRole] = new IdentityImpl(Identity.ROLE,Identity.XMLROLE,tempEl.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);

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

                          }

                          //加载子群组

                          tempNl = tempEl.getElementsByTagName("SubGroup");

                          if (tempNl != null)

                          {

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

                             for (int k = 0; k < subGroup.length; k++)

                             {

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

                                 subGroup[k] = new IdentityImpl(Identity.GROUP,Identity.XMLGROUP,tempElement.getAttribute("id"));

                             }

                          }

                          //加载用户

                          tempNl = tempEl.getElementsByTagName("User");

                          if (tempNl != null)

                          {

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

                             for (int k = 0; k < subGroup.length; k++)

                             {

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

                                 user[k] = new IdentityImpl(Identity.USER,Identity.XMLUSER,tempElement.getAttribute("id"));

                             }

                          }

                          return this;

                      }

                  }

               }

           } catch (Exception e)

           {

               e.printStackTrace();

           }

       }

        return null;

    }

}

 

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

<Group id="G01">

       <Name>系统部</Name>

      <Description>系统部</Description>

     </Group>

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

    <xs:complexType name="Group">

        <xs:annotation>

           <xs:documentation>群组</xs:documentation>

        </xs:annotation>

        <xs:complexContent>

           <xs:extension base="User">

               <xs:sequence>

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

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

               </xs:sequence>

           </xs:extension>

        </xs:complexContent>

    </xs:complexType>

linux学习笔记(二)--用户、群组和权限

Linux安全性模型 用户(User) 用户群组(Group) Linux权限种类 Linux文件和目录权限解读 Linux权限验证流程 设置Linux文件和目录的权限...
  • u011519624
  • u011519624
  • 2016年12月25日 23:48
  • 674

linux 用户、群组及权限操作

在linux中,一切皆文件,当我们创建一个用户时,其实是创建了以下文件: /etc/passwd 用户配置信息 /etc/shadow 用户密码 /etc/group 组信息 /etc/gshadow...
  • Ayhan_huang
  • Ayhan_huang
  • 2017年05月24日 15:15
  • 1182

用户,角色,群组,菜单权限控制

--用户所拥有的菜单权限是三部分的并集:--1,默认对"全部用户"开放的菜单--2,对特定角色开放的菜单,用户所属角色有(员工/客户),角色是用户的属性,但不是必须属性,可以没有--3,对指定群组开放...
  • yousuf007
  • yousuf007
  • 2010年10月27日 18:15
  • 1387

linux中的群组与权限

使用者与群组1.档案拥有者初次接触linux的朋友会觉得很差异,怎么linux那么多的使用者,还分什么群组,有什么用?这个用户与群组的功能是相当的健全而又好用的以一个安全防护呢。怎么说呢,由于linu...
  • JiangJunDriver
  • JiangJunDriver
  • 2017年04月19日 14:40
  • 643

ODOO8 按钮权限更改(3)

上一篇文章说到人工创建的用户组要想用到按钮的权限设置中,还需要为用户组人工创建外部标识(即完整ID) 虽然经过各种人工步骤能够达到目的, 但是经常搞这些事会觉得很烦,并且一般的用户学习起来也很头疼,...
  • OOODOOOO
  • OOODOOOO
  • 2015年08月22日 16:02
  • 772

ODOO8 Sale模块实施的按钮权限更改

ODOO的用户组是一种单向信息,为什么这么说? 我们在实施过程中,模块安装之后会创建一些用户组,然后向用户组添加用户、菜单、视图、访问权限等内容, 功能挺多,也确实有用。 但是,要想将这些组用于已经存...
  • OOODOOOO
  • OOODOOOO
  • 2015年08月21日 18:21
  • 705

LINUX : 权限与进程

权限 Linux系统中一切都是文件,文件和目录的所属与权限——来分别规定所有者、所有组、其余人的读,写,执行权限。读(read),写(write),执行e(xecute)简写即为(r,w,x),亦...
  • u010725690
  • u010725690
  • 2016年11月22日 23:13
  • 167

Linux-Linux所有者,群组,其他人

文章转自:http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission_1.php并做了适当修改。 使用者与群组 文件拥有者 初次接触Li...
  • sinat_27298703
  • sinat_27298703
  • 2015年06月09日 10:12
  • 1257

第六篇 zabbix创建主机群组

Zabbix可以同时监控多台机器,要想查看对某台机器的监控,只需要添加相应的主机即可(当然该主机必须要安装好zabbix_agentd,不然zabbix_server无法获取到该主机的监控数据)点击配...
  • u012062455
  • u012062455
  • 2016年11月17日 14:30
  • 2353

Linux 用户&群组&权限

linux安全性模型1,linux使用User和Group控制使用者对文件的存取权限 2,用户使用账号和口令登陆 3,每个文件都有owner并且owner属于group 4,每个程序都有自己的o...
  • shoyin
  • shoyin
  • 2016年03月11日 17:49
  • 159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:权限组件之二(群组)
举报原因:
原因补充:

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