论坛首页 Java企业应用论坛

用户,角色,权限常用实现方法

浏览 9251 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-11   最后修改:2009-01-11

用户,角色,权限常用实现方法

数据库表形式

用户表

用户编号

用户名

密码

角色编号

1

用户1

8888

1

 

角色表

角色编号

角色名

1

角色1

 

 

编号

功能

父编号

URL

1

图书管理

0

App/admin/11.jsp

2

图书校对

1

App/admin/12.jsp

3

图书调配

1

App/admin/13.jsp

4

图书注销

1

App/admin/14.jsp

5

删除图书

1

App/admin/15.jsp

6

数据备份

0

Backup.do

7

权限设置

0

App/admin/16.jsp

8

部门管理

0

App/admin/17.jsp

 

 

角色权限对应表

编号

角色编号

功能编号

权限

1

1

1

Y

2

1

2

Y

3

1

3

Y

4

1

4

Y

5

1

5

N

6

1

6

N

7

1

7

N

8

1

8

N

 

   发表时间:2009-01-11   最后修改:2009-01-11
实现代码!
import java.util.Set;   
  
public class UserVo {   
    private Integer id;   
    private String uname;   
    private String password;   
    private Level level;   
       
       
       
    public Level getLevel() {   
        return level;   
    }   
    public void setLevel(Level level) {   
        this.level = level;   
    }   
    public String getUname() {   
        return uname;   
    }   
    public void setUname(String uname) {   
        this.uname = uname;   
    }   
    public String getPassword() {   
        return password;   
    }   
    public void setPassword(String password) {   
        this.password = password;   
    }   
    public Integer getId() {   
        return id;   
    }   
    public void setId(Integer id) {   
        this.id = id;   
    }   
  
}   
  
  
  
public class Level {   
    private Integer id;   
    private String levelName;   
    private Set<Quanxian> qx = new HashSet<Quanxian>(0);   
    public Integer getId() {   
        return id;   
    }   
    public void setId(Integer id) {   
        this.id = id;   
    }   
    public String getLevelName() {   
        return levelName;   
    }   
    public void setLevelName(String levelName) {   
        this.levelName = levelName;   
    }   
    public Set<Quanxian> getQx() {   
        return qx;   
    }   
    public void setQx(Set<Quanxian> qx) {   
        this.qx = qx;   
    }   
}   
  
public class Quanxian {   
    private Integer id;   
    private String quanxian;   
    private Integer fatherid;   
    private String url;   
    public Integer getFatherid() {   
        return fatherid;   
    }   
    public void setFatherid(Integer fatherid) {   
        this.fatherid = fatherid;   
    }   
    public Integer getId() {   
        return id;   
    }   
    public void setId(Integer id) {   
        this.id = id;   
    }   
    public String getQuanxian() {   
        return quanxian;   
    }   
    public void setQuanxian(String quanxian) {   
        this.quanxian = quanxian;   
    }   
    public String getUrl() {   
        return url;   
    }   
    public void setUrl(String url) {   
        this.url = url;   
    }   
  
}   
  
  
public class AdminLoginCheck extends HttpServlet implements Filter {   
  
//通过 一个过滤器 Filter 进行权限控制   
       private FilterConfig filterConfig;   
        //Handle the passed-in FilterConfig   
           
        public void init(FilterConfig filterConfig) throws ServletException {   
            this.filterConfig = filterConfig;   
  
        }   
  
        //Process the request/response pair   
        public void doFilter(ServletRequest request, ServletResponse response,   
                             FilterChain filterChain) {//System.out.println(this.getClass()+": doFilter()");   
            HttpServletRequest req = (HttpServletRequest)request;   
            //System.out.println(req.getServletPath());   
               
            HttpServletResponse res = (HttpServletResponse)response;   
            HttpSession ses = req.getSession();   
Uservo uervo =ses.getAttribute("user")   
            try {//System.out.println("in Adminloginf........");   
                if(uervo ==null)   
                {   
                res.sendRedirect(req.getContextPath());   
                }else{   
                 Boolean allow= false ;   
                 Set<Quanxian> qxs = uservo.getLevel().getQx();   
                 For(Quanxian o:qxs){   
                    If(o.getUrl().equals(req.getServletPath())){   
allow=true;   
}   
}   
If(allow){   
 filterChain.doFilter(request, response);}   
                }   
            } catch (ServletException sx) {   
                filterConfig.getServletContext().log(sx.getMessage());   
            } catch (IOException iox) {   
                filterConfig.getServletContext().log(iox.getMessage());   
            }   
        }   
  
        //Clean up resources   
        public void destroy() {   
        }   
}  
0 请登录后投票
   发表时间:2009-01-12  
最简单的权限设计方式,不过还是要支持一下。另外您的名字太过了
0 请登录后投票
   发表时间:2009-01-12   最后修改:2009-01-12
xuyao 写道
最简单的权限设计方式,不过还是要支持一下。另外您的名字太过了

关于名字 Rod Johnson 是我的偶像 我本来以为有人已经注册了 可发现没人用 所以就用了!哈哈

关于权限 我希望能有高手把它抽像成非侵入框架 让后通过简单的配置就可以使用那样就方便多了!
0 请登录后投票
   发表时间:2009-01-12  
很平常的方法。
0 请登录后投票
   发表时间:2009-01-12  
看到多角色多权限我就想着用二进制的位运算的方式实现。。。
可能这是用C用出来的后遗症:不遗余力的改进算法,提升性能。。。
0 请登录后投票
   发表时间:2009-02-18  
我就是看到rod johnson才进来看的
0 请登录后投票
   发表时间:2009-02-18  
很常见的方法,还有,如果还要加一个工作组的话要复杂很多
0 请登录后投票
   发表时间:2009-02-18  
已经老掉牙了
0 请登录后投票
   发表时间:2009-02-19  
应该去掉权限的概念   新加一个资源的概念
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics