在BBS项目中 第一次新建一个帖子 称为文章 一篇帖子中 只有一个文章 但是可有多个回帖
如何判断某文章或者帖子是自己创建的 从而给与权限呢
下面给出代码:
// 判断本文章是否为登陆人创建 private Boolean isArticleAuthor() throws Exception { // 查询本文章的创建人 sql = "SELECT USER_ID FROM T_ARTICLE WHERE ARTICLE_ID = '" + artUuid+ "'"; sta = con.createStatement(); res = sta.executeQuery(sql); if (res.next()) { art_personUUID = res.getString(1); } if ((person.getUuid()).equals(art_personUUID)) { isArticleAuthor = true; } else { isArticleAuthor = false; } System.out.println("isArticleAuthor--->"+isArticleAuthor); return isArticleAuthor; }
不管用户是否设置昵称 任他的昵称如何改变 我们只要得到创建文章时设置的User_ID(好比人的身份证号),就可以唯一的标识这篇文章的创建人 从而控制权限
帖子的判断权限稍微复杂点,因为回帖的判断是对多个帖子的判断
① 首先我们要取出所有回帖的POST_ID,有多少个POST_ID就有多少回帖
sql = "SELECT POSTS_ID from T_POSTS WHERE ARTICLE_ID='"+artUuid+"'";
② 其次我们要根据回帖的ID取出这些回帖的创建人,创建人数至少1人,至多POST_ID.size()人.
sql = "SELECT USER_ID FROM T_POSTS WHERE POSTS_ID = '"+回帖ID集合+"'";
③ 因此我们可以把这两个sql语句合二为一 取得所有帖子的所有创建人
sql= "SELECT USER_ID FROM T_POSTS WHERE POSTS_ID IN (SELECT POSTS_ID from T_POSTS WHERE ARTICLE_ID='"+artUuid+"')";
这个语句使用介词IN来做了一个复杂查询 其实就是两个SQL语句取交集
下面给出具体的代码:
// 判断帖子是否是登陆人创建 private List isPostsAuthorList() throws Exception { sql = "SELECT USER_ID FROM T_POSTS WHERE POSTS_ID IN (SELECT POSTS_ID from T_POSTS WHERE ARTICLE_ID='" + artUuid + "')"; sta = con.createStatement(); res = sta.executeQuery(sql); System.out.println(sql); while(res.next()){ pos_personUUID = res.getString(1); if((person.getUuid()).equals(pos_personUUID)){ isPostsAuthor = true; }else{ isPostsAuthor = false; } isPostsAuthorList.add(isPostsAuthor); } return isPostsAuthorList; }
这个方法返回的是一个Boolean的List集合,根据帖子的顺序取得帖子创建时插入的USER_ID来和登陆人ID做比较,返回true/false.放入到集合中
并通过request.setAttribute()方法来共享此属性
在前台做权限判断时,就遍历这个List 取得单个的Boolean变量 判断 决定是否给与当前登陆人编辑/删除文章/帖子的权限