Spring Boot入门(第二十一章):用户角色权限(下)

上节我们完成了用户角色权限的增删改查,但是我们没有处理对象之间的关联关系,用户和角色,角色和权限之间的关联并没有建立。这节,以用户和角色的关联关系为例进行介绍。

我们先准备几条测试数据

之前还有一个小错误修正一下,User类中的属性role是一个集合,我们一般使用复数命名,虽然不影响功能,这里我们还是修改一下,将role改成roles。

1、增加分配角色按钮

我们增加一个分配角色按钮,点击按钮,弹出该用户的已有角色列表。

已有角色列表弹出框

增加两个属性,hasRoleDialogVisible用来标志弹出框是否显示,hasRoleData用来存储当前编辑用户的已有角色列表。

点击分配角色按钮时,触发assignRoles方法,这时,我们在弹出页面之前,应该先对hasRoleData赋值。对于我们现在这个例子来说,返回的用户信息就包含了角色列表,如果实际场景,用户信息里面没包含角色列表,那么我们就需要重新请求后台。

2、添加角色按钮

我们现在需要一个按钮,用来从未关联的角色列表中添加角色。

点击右上角的加号按钮,我们应该再弹出一个框,里面显示该用户没有关联的用户列表,这样我们后台先需要有一个服务,根据用户id,查询该用户没有关联的角色列表。

3、查询用户未关联的角色

我们先给UserRepository添加一个查询方法:

这里使用了JPA提供的一个函数elements,这个hql表示查询角色和用户表中指定用户id,且角色不在改用户的角色列表中的所有角色。如何我们要查询该用户已有的角色列表怎么查呢?答案是:

select r from Role r join User u u.roles where u.id=:userId

我们在UserController中再增加查询服务:

增加点击右上角增加角色按钮弹出框

添加几个data属性:

notHasRoleDialogVisible用来标志用户未关联角色列表弹出框的状态,notHasRoleDialogVisible存储未关联角色列表信息,currentUser用来存储当前编辑的用户对象。

现在我们来完成showAddRolePage方法。

因为用户已有的角色列表一般不会太多,所以已有列表我们没有进行分页,而未关联的角色列表可能会很多,需要进行分页,这里,我们先还得增加几个分页参数给他用。

4、添加角色方法

我们再来完善增加方法,增加方法就是给用户加上一个角色,这里我们只需要用户id和角色id两个参数即可,我们先写后台服务:

我们先要注入roleRepository,然后将角色添加到用户的角色列表中去,最后我们只需要保存用户,用户和角色的关联关系将会自动完成。

我们添加完一个角色后,重新查询下数据,这样页面就实时刷新了。但是这里有个问题,如果当前页面只有一条记录,这时添加完后,刷新当前页面,变成了空白,一般我们最好是回到最后一条记录的前一页。

这是一个容易忽略的地方,碰到这种情况大家要知道如何处理。

接下来,我们在关闭未关联角色列表的时候,需要刷新已关联角色列表数据。由于我们并没有查询用户已关联的角色列表的服务,之前的角色列表是从用户信息中自动关联查询的,我们现在改成,增加完角色后,将角色添加的用户的角色列表中去。

这样,用户的已关联角色列表就可以动态刷新了。

5、移除角色

最后我们还剩一个移除角色没有完成,同样的,我们先增加后台方法,接收参数和添加角色一致:

这样,我们整个例子就完整了。

6、总结:

这几章内容比较长,给用户赋予角色,看起来很简单的一个功能,实际上做起来还挺复杂的。角色关联权限的业务其实跟用户关联角色其实是非常类似的,这个功能就留着读者自己实现了。

代码:

https://github.com/www15119258/springboot-study/tree/branch21

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容