如果用ssh做一个oa系统,如何实现权限管理呢??
如题:
如果我要用ssh做一个oa系统,怎样实现复杂的权限管理呢?
注意:
不是单独基于角色,除了基于角色,还基于权限;
基于角色:如:管理员,经理,主管,普通员工等每个不同的角色拥有不同的权限;
基于权限:如:增、删、改、查,权限交叉管理
假设:有经理1,经理2;经理1可能只有查看、增加员工的权限,经理2有查看、增加、修改的权限;这些权限是管理员在添加角色是,赋予的角色一般权限外的权限,这些权限可以随时修改
这种该怎么做呢,现在没有头绪??
最好是哪位高手贴段代码,解释一下!!!
[解决办法]
写了个简单的权限控制,使用二进制的与和或来实现,每个权限值必须是2的整数次幂
package util;public class PermissionController { public static final int INSERT = 2; public static final int UPDATE = 4; public static final int DELETE = 8; private int permission = 0; public boolean canInsert() { return hasPermission(INSERT); } public boolean canUpdate() { return hasPermission(UPDATE); } public boolean canDelete() { return hasPermission(DELETE); } public void addInsertPermission() { addPermission(INSERT); } public void addUpdatePermission() { addPermission(UPDATE); } public void addDeletePermission() { addPermission(DELETE); } public void removeInsertPermission() { removePermission(INSERT); } public void removeUpdatePermission() { removePermission(UPDATE); } public void removeDeletePermission() { removePermission(DELETE); } public int getPermissionValue() { return permission; } private void addPermission(int p) { permission |= p; } private void removePermission(int p) { permission = permission & (~p); } private boolean hasPermission(int p) { return (permission & p) == p ? true : false; } public static void main(String[] args) { PermissionController p = new PermissionController(); System.out.println("添加权限......"); // 添加权限 p.addInsertPermission(); System.out.printf("Can insert: %s\n", p.canInsert()); // 删除权限 p.addDeletePermission(); System.out.printf("Can delete: %s\n", p.canDelete()); System.out.printf("Can update: %s\n", p.canUpdate()); System.out.println(Integer.toBinaryString(p.getPermissionValue())); System.out.println("删除权限......"); // 去掉删除权限 p.removeDeletePermission(); System.out.printf("Can delete: %s\n", p.canDelete()); System.out.println(Integer.toBinaryString(p.getPermissionValue())); }}
[解决办法]
使用enum的特性,能使得代码更加的简练
package util;public class PermissionController { private int permission = 0; static public enum Permission { INSERT(1), UPDATE(2), DELETE(4); // 每个权限的值是2的n次幂 private final int value; private Permission(int value) { this.value = value; } public int getValue() { return value; } } public void addPermission(Permission p) { for (Permission t : Permission.values()) { if (t == p) { permission |= p.getValue(); } } } public void removePermission(Permission p) { for (Permission t : Permission.values()) { if (t == p) { permission = permission & (~p.getValue()); } } } public boolean hasPermission(Permission p) { return (permission & p.getValue()) == p.getValue() ? true : false; } public int getPermissionValue() { return permission; } public static void main(String[] args) { PermissionController p = new PermissionController(); // 增加添加权限 System.out.println("增加添加权限"); p.addPermission(Permission.INSERT); System.out.printf("Can insert: %s\n", p.hasPermission(Permission.INSERT)); // 增加删除权限 System.out.println("增加删除权限"); p.addPermission(Permission.DELETE); System.out.printf("Can delete: %s\n", p.hasPermission(Permission.DELETE)); System.out.printf("Can update: %s\n", p.hasPermission(Permission.UPDATE)); System.out.println(Integer.toBinaryString(p.getPermissionValue())); System.out.println("去掉删除权限......"); // 去掉删除权限 p.removePermission(Permission.DELETE); System.out.printf("Can delete: %s\n", p.hasPermission(Permission.DELETE)); System.out.printf("Can insert: %s\n", p.hasPermission(Permission.INSERT)); System.out.println(Integer.toBinaryString(p.getPermissionValue())); }}