仿写linux文件系统的权限

原创
2016/09/27 16:56
阅读数 29

linux文件权限有3个:

r 4
w 2
x 执行 1

做web权限控制也可以参考这样进行。下面做个demo,有时间实际应用看看。

import java.util.ArrayList;
import java.util.List;

/**
 * 参考linux下文件的权限
 * 
 * @author 登琼 2016-09-26 18:08
 *
 */
public class PowerSecurity4Linux {
	/**
	 * 定义权限值
	 */
	List<Power> powerList = new ArrayList<>();
	{
		powerList.add(new Power("查看", 1));
		powerList.add(new Power("新增", 2));
		powerList.add(new Power("更新", 4));
		powerList.add(new Power("删除", 8));
		powerList.add(new Power("上传导入", 16));
		powerList.add(new Power("下载导出", 32));
	}

	public static void main(String[] args) {
		PowerSecurity4Linux p = new PowerSecurity4Linux();
		for (int i = 0; i < 100; i++) {
			p.showAllPower(i);
		}
	}

	/**
	 * 查询这个权限结果是否包含相关的权限
	 * 
	 * @param powerValue
	 *            权限全部值
	 * @param value
	 *            权限
	 * @return
	 */
	public boolean isPower(Integer powerValue, int value) {
		int a = powerValue / value;
		if (a == 1) {
			return true;
		}
		if (a == 0) {
			return false;
		}

		int maxPower = 0;
		int i = 2;
		while (i <= powerValue) {
			maxPower = i;
			i = i << 1;
		}

		powerValue = powerValue - maxPower;
		return isPower(powerValue, value);
	}

	/**
	 * 打印这个权限值的所有权限名称
	 * 
	 * @param powerValue
	 *            权限全部值
	 */
	public void showAllPower(Integer powerValue) {
		StringBuffer a = new StringBuffer();
		a.append(powerValue);
		a.append(":");
		for (Power power : powerList) {
			if (isPower(powerValue, power.getValue())) {
				a.append(power.getName());
				a.append(",");
			}
		}
		System.out.println(a);
	}

}

/**
 * 基础的权限
 * 
 * @author 登琼
 *
 */
class Power {
	String name;
	int value;

	public Power(String name, int value) {
		super();
		this.name = name;
		this.value = value;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}
}

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部