小胖 -RBAC(Role Base Access Controller) II 设计实现方案以及编码

本贴最后更新于 3205 天前,其中的信息可能已经时移世异

今天老婆终于把我从床上放出来了。。。。。

这两天睡得我是昏天黑地啊。真的只是睡觉哦。但是在我的坚持下,终于还是在床上吧代码写完了

首先我先把心得设计图放出来,大家看看,跟上一版有很大的差别。

然后的。是不是看不清??

给你们细化的一个一个截个图看看

这几个。看清楚了吧?

那么接下来我就用代码给大家讲讲实现吧。

 

权限类:

这个类主要就是个java bean 每一个此类的实例对象都是一个权限。

package com.dcl.zd.permission;

 

 

 

/**

 * @version 1.0

 * @created 30-十月-2016 11:21:34

 */

public class Permission {

 

/**

* 权限名称

*/

private String permissionName;

/**

* 权限编号

*/

private int permissionNum;

/**

* 权限url

*/

private String permissionUrl;

 

public Permission(){

 

}

 

public void finalize() throws Throwable {

 

}

 

public String getPermissionName(){

return permissionName;

}

 

public int getPermissionNum(){

return permissionNum;

}

 

public String getPermissionUrl(){

return permissionUrl;

}

public void setPermissionName(String name){

this.permissionName=name;

}

 

public void setPermissionNum(int num){

this.permissionNum=num;

}

 

public void setPermissionUrl(String url){

this.permissionUrl=url;

}

}

 

权限集合类:

权限列表类,它储存了一系列的权限,然后他会被 角色类引用代表角色的权限,它还会被userRoleList引用代表此用户的角色所给用户带来的所有权限,此外还会被SystemPermissionList引用,当前系统所有用户的权限都罗列与此。

package com.dcl.zd.permission;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Random;

import java.util.Set;

 

/**

 * @version 1.0

 * @created 30-十月-2016 11:21:24

 */

public class PermissionList {

private Map<String,Permission> permissionMap;

private List<Permission> permissionList;

 

public PermissionList(){

//initialization collection and used synchronized also initialization collection size. 

permissionList=Collections.synchronizedList(new ArrayList<Permission>(1200));

permissionMap=Collections.synchronizedMap(new HashMap<String,Permission>());

for(int i=0;i<=1200;i++){

permissionList.add(i ,null);

}

}

 

public void finalize() throws Throwable {

super.finalize();

}

 

/**

* add permission to this collection.

* @param permission

*/

public synchronized void addPermission(Permission permission){

permissionList.set(permission.getPermissionNum(),permission);

permissionMap.put(permission.getPermissionUrl(), permission);

}

/**

* add "permission" list all "permission" to this collection.return repetition "permission" number.

* @param permission

*/

public synchronized ArrayList<Integer> addAllPermission(final PermissionList permissions){

ArrayList<Integer> repetitionPermissionNum=new ArrayList<Integer>();

Iterator<Permission> i=permissions.permissionList.iterator();

while(i.hasNext()){

Permission permission=i.next();

if(permission!=null){

repetitionPermissionNum.add(permission.getPermissionNum());

permissionList.set(permission.getPermissionNum(),permission);

permissionMap.put(permission.getPermissionUrl(), permission);

}

}

return repetitionPermissionNum;

}

public List<Permission> getPermissionListData(){

return permissionList;

}

/**

* query permission according permission Number.

* @param num

*/

public Permission getPermissionByNum(int num){

return permissionList.get(num);

}

 

/**

* query permission according permission URL.

* @param url

*/

public Permission getPermissionByUrl(String url){

return permissionMap.get(url);

}

 

/**

* removed permission from collection according permission number 

* @param num

*/

public synchronized boolean removedPermission(int num){

Permission p=this.getPermissionByNum(num);

permissionMap.remove(p.getPermissionUrl());

permissionList.set(num, null);

return true;

}

/**

* removed a group assign permission.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-下午9:50:19

*/

public synchronized ArrayList<Integer> removedAnyPermission(ArrayList<Integer> removedList){

ArrayList<Integer> removedFaild=new ArrayList<Integer>();

Iterator<Integer> i=removedList.iterator();

while(i.hasNext()){

int num=i.next();

try{

Permission p=this.getPermissionByNum(num);

permissionMap.remove(p.getPermissionUrl());

permissionList.set(num, null);

}catch(Exception e){

removedFaild.add(num);

}

}

 

return removedFaild;

}

/**

* get permission number.

*/

public int getPermissionNum(){

return permissionMap.size();

}

/**

* to String used save File

*/

public String toString(){

StringBuffer sb=new StringBuffer();

Set<Entry<String, Permission>> set=permissionMap.entrySet();

Iterator<Entry<String, Permission>> i=set.iterator();

boolean isfirst=true;

while(i.hasNext()){

 

Entry<String, Permission> entry=i.next();

Permission item=entry.getValue();

if(isfirst){

sb.append(item.getPermissionNum()).append("-").append(item.getPermissionName()).append("-").append(item.getPermissionUrl());

isfirst=false;

}else{

sb.append(",").append(item.getPermissionNum()).append("-").append(item.getPermissionName()).append("-").append(item.getPermissionUrl());

}

 

}

return sb.toString();

}

/**

* permission String split convert map and list

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年10月31日-下午3:54:48

*/

protected void loadStringToPermission(String permissionString){

String[] permissionListArray=permissionString.split(",");

if(permissionListArray.length>=1&&!permissionListArray[0].equals("")){

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

String[] permissionItem=permissionListArray[i].split("-");

Permission p=new Permission();

p.setPermissionName(permissionItem[1]);

p.setPermissionNum(Integer.parseInt(permissionItem[0]));

p.setPermissionUrl(permissionItem[2]);

this.addPermission(p);

}

}

}

/**

* test and look program performance.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年10月31日-下午4:13:43

*/

public static void main(String args[]){

PermissionList p=new PermissionList();

long nowTime1=System.currentTimeMillis();

for(int i=0;i<=1200;i++){

Permission pitem=new Permission();

pitem.setPermissionName("name"+i);

pitem.setPermissionNum(i);

pitem.setPermissionUrl("url"+i);

p.addPermission(pitem);

}

long nowTime1end=System.currentTimeMillis();

System.out.println(nowTime1end-nowTime1);

Random r=new Random();

int i=r.nextInt(100000);

long nowTime2=System.currentTimeMillis();

Permission p3=p.getPermissionByNum(i);

long nowTime2end=System.currentTimeMillis();

System.out.println(nowTime2end-nowTime2+"  "+p3.getPermissionName());

long nowTime3=System.currentTimeMillis();

Permission p4=p.getPermissionByUrl("url"+i);

long nowTime3end=System.currentTimeMillis();

System.out.println(nowTime3end-nowTime3+"  "+p4.getPermissionName());

}

}

 

Roles 角色类:

代表一个角色:

它内部有:

权限列表

角色编号

角色名称

数据文件

拥有此角色的有所用户列表

角色创建的日期

让我在代码里为你解答他们的作用吧。

package com.dcl.zd.permission;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Collections;

import java.util.Date;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

 

/**

 * @version 1.0

 * @created 30-十月-2016 11:21:12

 */

public class Roles {

 

private Date createDate;角色创建的日期

private File dataFile;数据文件

private String name;角色名称

private int num;角色编号

private PermissionList permissions;权限列表

private List<Long> userList;拥有此角色的有所用户列表

//构造方法,会初始化所有信息,并且判断是否已经有了此角色的数据文件,如果没有则创建,如果有则从数据文件中加载数据信息,进行解析在放入相对应的集合。

public Roles(int num){

this.num=num;

permissions=new PermissionList();

/**

* LinkedList is ordered

*/

userList=Collections.synchronizedList(new LinkedList<Long>());

dataFile=new File("permission"+File.separatorChar+"roles"+File.separatorChar+"roles_"+num+".permission");

if(!dataFile.exists()){

this.name="默认角色名称";

this.saveData();

}else{

this.loadData();

}

}

 

public void finalize() throws Throwable {

super.finalize();

}

//设置角色名称

public void setName(String name){

this.name=name;

this.saveData();

}

/**

通过权限的编号获取权限

* get role permission by permission number.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:57:00

*/

public Permission getPermission(int num){

return permissions.getPermissionByNum(num);

}

/**

通过权限的url获取权限

* get role permission by permission url

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:57:36

*/

public Permission getPermission(String url){

return permissions.getPermissionByUrl(url);

}

/**

添加权限

* add permission to this role.

* @param permissionNum

* @throws IOException 

*/

public boolean addPermission(int permissionNum) throws IOException{

Permission p=SystemPermissionList.getSystemPermissionListInstance().getPermissionByNum(permissionNum);

if(p==null||permissions.getPermissionByNum(permissionNum)!=null){

return false;

}else{

permissions.addPermission(p);

Iterator<Long> i=userList.iterator();

while(i.hasNext()){

Long userid=i.next();

UserRoleList user=SystemPermissionList.getSystemPermissionListInstance().getUserById(userid);

user.removedRole(this.num);

user.addRole(this.num);

}

this.saveData();

return true;

}

}

 

/**

从角色移除权限,并会从所有拥有此角色的用户角色列表中删除此权限

* removed permission from this role.

* @param permissionNum

* @throws IOException 

*/

public boolean removedPermission(int permissionNum) throws IOException{

boolean b=permissions.removedPermission(permissionNum);

Iterator<Long> i=userList.iterator();

while(i.hasNext()){

Long userid=i.next();

UserRoleList user=SystemPermissionList.getSystemPermissionListInstance().getUserById(userid);

user.removedRole(this.num);

user.addRole(this.num);

}

this.saveData();

return b;

}

/**

保存数据

* save role information to role file.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:21

*/

public synchronized boolean saveData(){

File directory=new File("permission"+File.separatorChar+"roles");

if(!directory.exists()){

directory.mkdirs();

}

if(!dataFile.exists()){

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try(PrintWriter print=new PrintWriter(new FileOutputStream(dataFile),true)) {

print.println("createDate");

createDate=new Date();

print.println(createDate.getTime());

print.println("name");

print.println(name);

print.println("num");

print.println(num);

print.println("permissions");

print.println(permissions.toString());

print.println("userList");

print.println(userList.toString().replace("[", "").replace("]", "").replace(" ", ""));

 

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

/**

加载数据

* load role information from role file.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:49

*/

public boolean loadData(){

File directory=new File("permission"+File.separatorChar+"roles");

if(!directory.exists()){

directory.mkdirs();

}

if(!dataFile.exists()){

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try(Scanner read=new Scanner(new FileInputStream(dataFile))) {

while(read.hasNextLine()){

String dataname=read.nextLine();

switch(dataname){

case "createDate":

createDate=new Date(Long.parseLong(read.nextLine()));

break;

case "name":

name=read.nextLine();

break;

case "num":

num=Integer.parseInt(read.nextLine());

break;

case "permissions":

permissions.loadStringToPermission(read.nextLine());

break;

case "userList":

String userListString=read.nextLine();

if(!userListString.equals("")){

String[] userListArray=userListString.split(",");

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

userList.add(Long.parseLong(userListArray[i]));

}

}

break;

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

/**

获取角色编号

* get now object unique number.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-下午7:09:06

*/

public int getNum(){

return this.num;

}

/**

添加用户,主要被框架内使用

*/

protected boolean addUser(final long userId){

if(!userList.contains(userId)){

userList.add(userId);

this.saveData();

return true;

}else{

return false;

}

 

}

/**

* 移除用户也主要被框架内使用

*/

protected boolean removedUser(final long userId){

if(userList.contains(userId)){

userList.remove(userId);

this.saveData();

return true;

}else{

return false;

}

}

/**

* 获取此角色的权限列表

*/

public PermissionList getPermissionList(){

return permissions;

}

/**

测试了一下

* test load data and test role data save.  

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:59:18

*/

public static void main(String args[]){

Roles role=new Roles(0);

role.loadData();

role.saveData();

System.out.println(role.name);

System.out.println(role.num);

System.out.println(role.permissions);

System.out.println(role.userList);

}

}

 

SystemPermissionList:系统权限配置列表
此类是个单例,所有的权限都在此类的数据文件中配置,我自己思考应该设计一个注解,然后在每个需要用到权限的方法上进行配置如:@DCLPermission(num="权限编号",url="权限路径标示",name="权限名称"),或者使用Proxy InvocationHandle,然后自动注册进入SystemPermissionList,这样方便开发人员使用(这个后边在细化一下)

package com.dcl.zd.permission;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

 

/**

 * @author 董成龙

 * @version 1.0

 * @created 30-十月-2016 11:20:49

 */

public class SystemPermissionList {

private static SystemPermissionList obj;单例

private int roleNumIndex;角色生成的编号,每次生成一个次数加1,目前没做删除的情况

private PermissionList systemPermissionMap;系统全部权限罗列

private List<Roles> roleList;系统全部角色

private List<Integer> roleArray;系统全部角色编号

private HashMap<Long,UserRoleList> userList; 系统全部权限用户

private List<Long> userListArray;系统全部权限用户Id

private File dataFile;数据文件

下面的自己看看方法名称也就知道了

private SystemPermissionList() throws IOException{

systemPermissionMap=new PermissionList();

roleList=Collections.synchronizedList(new ArrayList<Roles>(1000));

roleArray=Collections.synchronizedList(new LinkedList<Integer>());

userList=new HashMap<>();

userListArray=Collections.synchronizedList(new LinkedList<Long>());

 

for(int i=0;i<=1000;i++){

roleList.add(i ,null);

}

dataFile=new File("permission"+File.separatorChar+"System.permission");

if(!dataFile.exists()){

roleNumIndex=0;

this.saveData();

}else{

this.loadData();

}

}

public Roles getRoleByNum(int num){

return roleList.get(num);

}

public UserRoleList getUserById(long num){

return userList.get(num);

}

public PermissionList getAllPermission(){

return systemPermissionMap;

}

public List<Roles> getAllRoles(){

return roleList;

}

public synchronized Roles createNewRole(){

int num=this.getroleNumIndex();

Roles role=new Roles(num);

roleList.set(role.getNum(), role);

roleArray.add(role.getNum());

this.saveData();

return role;

}

public synchronized UserRoleList createUserRoleList(long userId){

UserRoleList user=new UserRoleList(userId,this);

if(!userList.containsKey(userId)){

userList.put(userId, user);

userListArray.add(userId);

saveData();

}

return user;

}

public static SystemPermissionList getSystemPermissionListInstance() throws IOException{

if(obj==null){

obj=new SystemPermissionList();

}

return obj;

}

public Permission getPermissionByNum(int num){

return this.systemPermissionMap.getPermissionByNum(num);

}

public Permission getPermissionByUrl(String url){

return this.systemPermissionMap.getPermissionByUrl(url);

}

public void finalize() throws Throwable {

super.finalize();

}

protected synchronized int getroleNumIndex(){

roleNumIndex++;

 

return roleNumIndex;

}

/**

* save role information to role file.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:21

*/

public synchronized boolean saveData(){

File directory=new File("permission"+File.separatorChar+"roles");

if(!directory.exists()){

directory.mkdirs();

}

if(!dataFile.exists()){

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try(PrintWriter print=new PrintWriter(new FileOutputStream(dataFile),true)) {

print.println("roleNumIndex");

print.println(roleNumIndex);

print.println("systemPermissionMap");

print.println(systemPermissionMap.toString());

print.println("roleArray");

print.println(roleArray.toString().replace("[", "").replace("]", "").replace(" ", ""));

print.println("userListArray");

print.println(userListArray.toString().replace("[", "").replace("]", "").replace(" ", ""));

 

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

/**

* load role information from role file.

* <p>Description: </p>

* @author 董成龙 

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:49

*/

public boolean loadData(){

File directory=new File("permission"+File.separatorChar+"roles");

if(!directory.exists()){

directory.mkdirs();

}

if(!dataFile.exists()){

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try(Scanner read=new Scanner(new FileInputStream(dataFile))) {

while(read.hasNextLine()){

String dataname=read.nextLine();

switch(dataname){

case "roleNumIndex":

roleNumIndex=Integer.parseInt(read.nextLine());

break;

case "systemPermissionMap":

String systemPermissionString=read.nextLine();

systemPermissionMap.loadStringToPermission(systemPermissionString);

break;

case "userListArray":

String userListArrayString=read.nextLine();

if(!userListArrayString.equals("")){

String[] userListArrays=userListArrayString.split(",");

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

userListArray.add(Long.parseLong(userListArrays[i]));

userList.put(Long.parseLong(userListArrays[i]), new UserRoleList(Long.parseLong(userListArrays[i]),this));

}

}

break;

case "roleArray":

String roleArrayString=read.nextLine();

if(!roleArrayString.equals("")){

String[] roleListArray=roleArrayString.split(",");

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

roleArray.add(Integer.parseInt(roleListArray[i]));

Roles roles=new Roles(Integer.parseInt(roleListArray[i]));

roles.loadData();

roleList.add(Integer.parseInt(roleListArray[i]),roles);

}

}

break;

 

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

}

 

UserRoleList:用户角色列表

此类对象用于保存用户的所有角色,以及维护一个用户权限列表

 

package com.dcl.zd.permission;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

 

/**

 * @author 董成龙

 * @version 1.0

 * @created 30-十月-2016 11:21:01

 */

public class UserRoleList {

private File dataFile;数据文件

// user "permission" list.

private PermissionList userPermissionList;用户权限列表

// record "permission" repetition emergence in the user role list of number.

private List<Integer> permissionRepetitionNum;用户权限重复的列表,以及重复次数

// the role of the user

private List<Roles> roleList; 角色列表

private List<Integer> roleArray; 角色列表

// user uniqueness flag in database 

private long userId;用户唯一标示

省下的比较好理解,自己看看好了,哪里不懂就留言

public UserRoleList(long userid,SystemPermissionList sysPermissionList) {

this.userId = userid;

userPermissionList = new PermissionList();

permissionRepetitionNum = Collections.synchronizedList(new ArrayList<Integer>(1200));

roleList = Collections.synchronizedList(new ArrayList<Roles>(1000));

roleArray = Collections.synchronizedList(new LinkedList<Integer>());

for (int i = 0; i <= 1200; i++) {

permissionRepetitionNum.add(i, 0);

}

for (int i = 0; i <= 1000; i++) {

roleList.add(i, null);

}

dataFile = new File("permission" + File.separatorChar + "userRoles" + File.separatorChar + "user_" + userid

+ ".permission");

if (!dataFile.exists()) {

this.saveData();

} else {

this.loadData(sysPermissionList);

}

}

 

public void finalize() throws Throwable {

super.finalize();

}

 

/**

* @param num

* @throws IOException

*/

public boolean addRole(int num) {

if(roleList.get(num)==null){

try {

Roles roles = SystemPermissionList.getSystemPermissionListInstance().getRoleByNum(num);

 

PermissionList p = roles.getPermissionList();

ArrayList<Integer> repetitionPermissionNumber = userPermissionList.addAllPermission(p);

Iterator<Integer> i = repetitionPermissionNumber.iterator();

while (i.hasNext()) {

Integer repetitionNum = i.next();

permissionRepetitionNum.set(repetitionNum, (permissionRepetitionNum.get(repetitionNum) + 1));

}

roleList.set(roles.getNum(),roles);

roleArray.add(roles.getNum());

roles.addUser(userId);

saveData();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return true;

}else{

return false;

}

}

 

/**

* @param url

*/

public boolean existPermission(String url) {

return userPermissionList.getPermissionByUrl(url)!=null;

}

 

/**

* @param num

*/

public boolean existPermission(int num) {

return userPermissionList.getPermissionByNum(num)!=null;

}

 

/**

* @param num

*/

public boolean existRole(int num) {

return roleList.get(num)!=null;

}

 

/**

* removed role from UserRoleList and removed role of permission from user permission list.

* @param num

*/

public synchronized boolean removedRole(int num) {

if(roleArray.contains(num)){

ArrayList<Integer> removedNoRepetition=new ArrayList<Integer>();

Roles roles=roleList.get(num);

roleList.set(roles.getNum(), null);

roleArray.remove(Integer.valueOf(roles.getNum()));

PermissionList rpermission =roles.getPermissionList();

List<Permission> plist=rpermission.getPermissionListData();

Iterator<Permission> i=plist.iterator();

while(i.hasNext()){

Permission pitem=i.next();

if(pitem!=null){

int permissionNum=permissionRepetitionNum.get(pitem.getPermissionNum());

if(permissionNum<=1){

permissionRepetitionNum.set(pitem.getPermissionNum(), 0);

removedNoRepetition.add(pitem.getPermissionNum());

}else{

permissionRepetitionNum.set(pitem.getPermissionNum(), permissionNum-1);

}

}

}

ArrayList<Integer> noRemovedPermission=userPermissionList.removedAnyPermission(removedNoRepetition);

saveData();

return noRemovedPermission.size()==0;

}else{

return false;

}

}

 

/**

* save role information to role file.

* <p>

* Description:

* </p>

* @author 董成龙

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:21

*/

public synchronized boolean saveData() {

File directory = new File("permission" + File.separatorChar + "userRoles");

if (!directory.exists()) {

directory.mkdirs();

}

if (!dataFile.exists()) {

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try (PrintWriter print = new PrintWriter(new FileOutputStream(dataFile), true)) {

print.println("userId");

print.println(userId);

print.println("userPermissionList");

print.println(userPermissionList.toString());

print.println("roleArray");

print.println(roleArray.toString().replace("[", "").replace("]", "").replace(" ", ""));

print.println("permissionRoleHiveNum");

print.println(permissionRepetitionNum.toString().replace("[", "").replace("]", "").replace(" ", ""));

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

 

/**

* load role information from role file.

* <p>

* Description:

* </p>

* @author 董成龙

* @email 8261425@qq.com

* @date 2016年11月1日-上午10:58:49

*/

public boolean loadData(SystemPermissionList s) {

File directory = new File("permission" + File.separatorChar + "roles");

if (!directory.exists()) {

directory.mkdirs();

}

if (!dataFile.exists()) {

try {

dataFile.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return false;

}

 

}

try (Scanner read = new Scanner(new FileInputStream(dataFile))) {

while (read.hasNextLine()) {

String dataname = read.nextLine();

switch (dataname) {

case "userId":

userId = Long.parseLong(read.nextLine());

break;

case "userPermissionList":

String systemPermissionString = read.nextLine();

userPermissionList.loadStringToPermission(systemPermissionString);

break;

case "roleArray":

String roleArrayString = read.nextLine();

if (!roleArrayString.equals("")) {

String[] roleListArray = roleArrayString.split(",");

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

roleArray.add(Integer.parseInt(roleListArray[i]));

Roles roles = s.getRoleByNum(Integer.parseInt(roleListArray[i]));

roleList.set(roles.getNum(), roles);

}

}

break;

case "permissionRoleHiveNum":

String userListArrayString = read.nextLine();

if (!userListArrayString.equals("")) {

String[] userListArrays = userListArrayString.split(",");

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

permissionRepetitionNum.set(i,

Integer.parseInt(userListArrays[i]));

}

}

break;

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

return false;

}

return true;

}

 

public static void main(String args[]) {

SystemPermissionList l;

try {

l = SystemPermissionList.getSystemPermissionListInstance();

/**

* 增加角色

*/

Roles r1 = l.getRoleByNum(1);

if(r1==null){

r1=l.createNewRole();

}

/**

* 给角色添加权限

*/

r1.addPermission(1);

r1.addPermission(2);

/**

*通过用户id创建一个用户权限

*/

UserRoleList ur1=l.createUserRoleList(1);

/**

* 向用户添加角色

*/

//ur1.addRole(r1.getNum());

System.out.println(ur1.existPermission(1));

/**

* 删除角色从用户

*/

ur1.removedRole(r1.getNum());

/**

* 查询全部角色

*/

l.getAllRoles();

 

/**

* 用权限num判断用户是否有某一个权限

*/

System.out.println(ur1.existPermission(1));

/**

* 用url判断用户是否有某一个权限

*/

ur1.existPermission("");

/**

* 通过角色号判断用户手否有某一个角色

*/

ur1.existRole(2);

ur1.existRole(1);

/**

/*

Roles r2=l.getRoleByNum(1);

ur1.addRole(r2.getNum());*/

/*UserRoleList ur1=l.getUserById(12);

ur1.removedRole(1);*/

 

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

}

 

欢迎大家留言啊。这样我才有动力继续写啊。。

好了大家拜拜,

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 148 关注
  • Excel
    31 引用 • 28 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1795 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26723 引用 • 111315 回帖
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 3 关注
  • 安全

    安全永远都不是一个小问题。

    200 引用 • 818 回帖 • 2 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10316 引用 • 46843 回帖 • 62 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖 • 2 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 180 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    17 引用 • 7 回帖 • 3 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 389 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 687 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 2 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 74 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 668 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 355 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 93 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 555 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 688 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖