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

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

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

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

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

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

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

这几个。看清楚了吧?

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

 

权限类:

这个类主要就是个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();

}

 

}

}

 

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

好了大家拜拜,

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 43 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 53 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 22 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • abitmean

    有点意思就行了

    21 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 512 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    535 引用 • 672 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 493 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 319 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 21 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 201 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 473 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 348 关注
  • frp

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

    15 引用 • 7 回帖 • 7 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    172 引用 • 990 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1450 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 692 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    161 引用 • 473 回帖
  • 区块链

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

    91 引用 • 751 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 405 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 525 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 265 关注
  • PWL

    组织简介

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

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

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

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 597 关注