jfinalQ开发教程02-权限系统和一对多的处理

security_icons.png

权限系统

1.说明

基于jfinal的全局Interceptor做的权限系统,

分为两块,一是公开可以访问的地址,二是简单的RBAC权限管理


2.公开访问地址

需要配置项目中的jfinal-auth.xml文件,如下:

4.png

其中外层可以自己起名字,只要最后的一层是以url命名即可,

一旦在这里配置了路径,任何用户以及用户是否登录都可以访问。


RBAC

1.说明

RBAC,即role based access control,基于角色的访问控制


2.表结构

5.png
t_ucenter_menu表记录了各个访问地址,也就是菜单

t_ucenter_user表记录了用户信息

t_ucenter_role表记录了角色信息

t_ucenter_role_r_user表记录了角色-用户关系

t_ucenter_role_r_menu表记录了角色-菜单关系


3.权限控制

如果用户A,属于角色A,且角色A有菜单1-5的权限,那么用户A即可访问菜单1-5


代码生成后设置权限

1.代码生成的最后一步

上文说了代码生成,将生成的代码复制到项目中,功能还是不能访问的,需要手动进行权限设置


2.admin登录

以admin登录jfinalQ,登录后auth菜单下有菜单管理,用户管理,角色管理,如下

6.png


3.添加菜单

点击菜单管理,以t_blog_type生成的代码为例,需要添加如下菜单:

7.png

其中blog(--)是功能级菜单,没有实际意义,blog菜单下有博客类型管理,博客文章管理,博客评论管理,

每一个表对应需要添加五个菜单,

父菜单,博客类型管理(/blog/type)

搜索菜单,/blog/type/search

编辑菜单,/blog/type/savep

保存菜单,/blog/type/save

删除菜单,/blog/type/del


4.为角色添加菜单

点击角色管理,以超级管理员admin为例,如下:

8.png

点击最后一个按钮,管理角色对应的菜单,如下:

9.png

将之前添加的博客类型的五个菜单勾选,并点击保存。

若是其他角色,则勾选该角色需要访问的菜单即可。


5.重新登录

退出系统并重新登录,即可看到之前添加的菜单,如下:

10.png

点击博客类型管理,即可进行增删改查,如下:

11.png


6.代码生成完结

至此,代码生成并分配权限全部完成,

按表规范设计表,生成代码,拷贝代码,设置权限,使用功能,

普通的增删改查的实现,估计不超过5分钟。


一对多

1.说明

基本上所有的系统都会涉及到一对多和多对多,而多对多又可以转换为一对多,这里说下一对多的相关操作


2.弱外键

个人认为弱外键是比较好的习惯,即在子表中记录父表id,而不做外键关联。

需要注意的是,采用弱外键后需要在代码层级做控制。


父表

生成代码后需要做一些修改,包括后台代码和前台代码,以t_blog_type和t_blog_article为例

1.后台-Model

BlogTypeModel需要获取对应的所有的BlogArticleModel,所以需要添加:

/**
	 * get articles
	 * @return
	 */
	public List<BlogArticleModel> articles(){
		return BlogArticleModel.dao.find("select * from t_blog_article where blog_type_id=? order by blog_article_title", get("id"));
	}

也就是通过t_blog_type的id来获取所有t_blog_article中blog_type_id相对应的值


2.后台-Controller

在代码级别做控制,那么当删除t_blog_type的一条记录时,会默认删除所有相关的t_blog_article记录,如下:

/**
	 * 删除一条或多条
	 */
	public void del(){
		QJson json = del(BlogTypeModel.class, BlogArticleModel.class, "blog_type_id");
		if(QJsonUtil.TYPE_BS_SUCC.equals(json.getType())){
			QCacheUtil.putToEHCache("blogTypes", BlogTypeModel.dao.findAll());
		}
		
		renderJson(json);
	}

3.前台页面

无需修改


子表

1.后台-Model

无需修改


2.后台-Controller

显示子表列表的时候需要关联父表,例如需要显示blog_type_name,所以index方法需要修改为:

/**
	 * 跳转到首页 
	 */
	public void index(){
		setAttr("qpage", listBySql(getParaMap(), " (select ba.*,bt.blog_type_name tname from t_blog_article ba, t_blog_type bt where ba.blog_type_id=bt.id ) as tba ", "tba"));
		render("/WEB-INF/view/manage/blog/blog-article-index.html");
	}

同样进行添加修改搜索的时候需要显示父表列表,所以相关方法需要添加父表列表,

/**
	 * 跳转到搜索页面
	 */
	public void search(){
		setAttr("blogTypes", BlogTypeModel.dao.findAll());
		
		render("/WEB-INF/view/manage/blog/blog-article-search.html");
	}


3.前台-index.html

列表页面要显示blog_type_name,和index方法中的tname对应,如下:

12.png


4.前台-input.html,search.html

添加修改搜索的时候需要显示父表列表,和后台方法中的blogTypes对应,如下:

13.png


jfinalQ2.0

官网:http://uikoo9.com/jfinalQ

源码:https://github.com/uikoo9/jfinalQ


更多精彩内容:http://uikoo9.com/


求打赏(长按图片即可识别)~
微信 捐助列表:http://uikoo9.com/donate/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uikoo9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值