มีการวางแผนที่จะเพิ่มฟังก์ชั่นการกำหนดค่าการอนุญาตให้กับโครงการโอเพ่นซอร์สและวางแผนที่จะเพิ่ม Ztree เพื่อใช้โครงสร้างต้นไม้
ลิงค์โครงการโอเพ่นซอร์ส GitHub ของทีม: https://github.com/u014427391/jeepatform Welcomes Star (คอลเลกชัน)
Ztree เป็น "ปลั๊กอินต้นไม้" อเนกประสงค์ที่ใช้โดย jQuery ประสิทธิภาพที่ยอดเยี่ยมการกำหนดค่าที่ยืดหยุ่นและการรวมกันของหลายฟังก์ชั่นเป็นข้อได้เปรียบที่ใหญ่ที่สุดของ Ztree
ลิงค์ดาวน์โหลด ztree: http://www.treejs.cn/v3/main.php#_ztreeinfo
ข้อมูลบทบาทของกิจการบทบาท:
แพ็คเกจ org.muses.jeepatform.core.entity.admin; นำเข้า Javax.persistence.*; นำเข้า java.io.serializable; นำเข้า java.util.hashset; นำเข้า Java.util.set;/*** @description 2017*/@table (name = "sys_role")@entitypublic class บทบาทการใช้งาน serializable {/** รหัสบทบาท **/private int roleid; / ** คำอธิบายบทบาท **/ สตริงส่วนตัว roledesc; / ** ชื่อบทบาท **/ string ส่วนตัว rolename; / ** ธงบทบาท **/ บทบาทสตริงส่วนตัว; เซตส่วนตัว <Sumission> สิทธิ์ = HASHSET ใหม่ <PerchSion> (); @ID @GeneratedValue (กลยุทธ์ = GenerationType.Identity) สาธารณะ int getroleid () {return roleid; } โมฆะสาธารณะ setroleid (int roleid) {this.roleid = roleid; } @column (ความยาว = 100) สตริงสาธารณะ getRoledesc () {return roledesc; } โมฆะสาธารณะ SetRoleDesc (String RoLedesc) {this.roledesc = RoLedesc; } @column (ความยาว = 100) สตริงสาธารณะ getRolename () {return rolename; } โมฆะสาธารณะ setRolename (String Rolename) {this.rolename = rolename; } @column (ความยาว = 100) สตริงสาธารณะ getrole () {บทบาทคืน; } โมฆะสาธารณะ setrole (บทบาทสตริง) {this.role = บทบาท; } // แก้ไขนโยบายน้ำตกเพื่อความสัมพันธ์แบบเรียงซ้อน @Onetomany (targetEntity = การอนุญาต class, cascade = cascadetype.merge, fetch = fetchType.eager) @Jointable (ชื่อ = "sys_role_permission" InverseJoincolumns =@Joincolumn (name = "permissionId", referencedColumnName = "id", ไม่ซ้ำกัน = true)) ชุดสาธารณะ <cermission> getPerMissions () {สิทธิ์การส่งคืน; } โมฆะสาธารณะ setPerMissions (SET <Sumission> สิทธิ์) {this.permissions = การอนุญาต; } @Override บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (OBJ Instanceof Role) {บทบาทบทบาท = (บทบาท) OBJ; ส่งคืน this.roleid == (role.getRoleid ()) && this.rolename.equals (role.getRolename ()) && this.roledesc.equals (role.getRoledesc ()) && this.role.equals (role.getrole ()); } return super.equals (obj); -ชั้นเรียนข้อมูลการอนุญาต:
แพ็คเกจ org.muses.jeepatform.core.entity.admin; นำเข้า java.io.serializable; นำเข้า java.util.hashset; นำเข้า java.util.set นำเข้า Javax.persistence.cascadetype; นำเข้า Javax.persistence.column javax.persistence.fetchtype; นำเข้า Javax.persistence.generatedValue; นำเข้า Javax.persistence.generationType; นำเข้า Javax.persistence.id; นำเข้า Javax.persistence.Joincolumn; javax.persistence.onetoone; นำเข้า Javax.persistence.table;/*** @description vo class สำหรับการดำเนินการอนุญาต* @author Nicky* @date 6 มีนาคม 2017*/ @table (ชื่อ = "sys_permission") @entitypublic คลาส สตริงส่วนตัว PDESC; ชื่อสตริงส่วนตัว; ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1L; เมนูเมนูส่วนตัว เซตส่วนตัว <peration> การดำเนินการ = ใหม่ hashset <peration> (); การอนุญาตสาธารณะ () {super (); } @GeneratedValue (Strategy = GenerationType.Identity) @ID สาธารณะ int getId () {return this.id; } โมฆะสาธารณะ setId (int id) {this.id = id; } @column (ความยาว = 100) สตริงสาธารณะ getPdesc () {return this.pdesc; } โมฆะสาธารณะ setpdesc (สตริง pdesc) {this.pdesc = pdesc; } @Column (ความยาว = 100) สตริงสาธารณะ getName () {return this.name; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } @OnetOone (targetEentity = menu.class, cascade = cascadetype.refresh, fetch = fetchType.eager) @Joincolumn (name = "menuid", referencedColumnName = "menuid") เมนูสาธารณะ getMenu () {เมนูกลับ; } โมฆะสาธารณะ setMenu (เมนูเมนู) {this.menu = เมนู; } @Manytomany (TargetEntity = Operation.class, cascade = cascadetype.merge, fetch = fetchType.eager) @jointable (name = "sys_permission_operation", Joincolumns =@Joincolumn (name = "PermissionId", referencedColumnName = "id"), InverseJoincolumns =@Joincolumn (NAME = "OperationId" } โมฆะสาธารณะ setOperations (ตั้งค่า <peration> การดำเนินงาน) {this.operations = การดำเนินการ; -ใช้คลาสข้อมูลเมนูโดยใช้ JPA เพื่อใช้งาน
แพ็คเกจ org.muses.jeepatform.core.entity.admin; นำเข้า Javax.persistence.*; นำเข้า java.io.serializable; นำเข้า java.util.list;/*** @description Entity Entity* @author nicky* @ @@Date มีนาคม { / ** รหัสเมนู ** / ส่วนตัว Int เมนู INT; / ** ID ที่เหนือกว่า **/ Private Int Parentid; / ** ชื่อเมนู **/ Menuname สตริงส่วนตัว; / ** ไอคอนเมนู **/ เมนูสตริงส่วนตัว; / ** URL เมนู **/ สตริงส่วนตัวเมนู MENICORL; / ** ประเภทเมนู **/ สตริงส่วนตัว menutype; / ** เมนูเรียงลำดับ **/ สตริงส่วนตัวเมนูเมนู; / ** สถานะเมนู **/ สตริงส่วนตัว menustatus; รายการส่วนตัว <เมนู> เมนูย่อย; เป้าหมายสตริงส่วนตัว Boolean ส่วนตัว hassubmenu = false; เมนูสาธารณะ () {super (); } @id @GeneratedValue (strategy = generationType.Identity) สาธารณะ int getMenuid () {return this.menuid; } โมฆะสาธารณะ setMenuid (int menuid) {this.menuid = menuid; } @Column (ความยาว = 100) สาธารณะ int getParentId () {return parentId; } โมฆะสาธารณะ setParentId (int parentId) {this.parentId = parentId; } @Column (ความยาว = 100) สตริงสาธารณะ getMenUname () {return this.menuname; } โมฆะสาธารณะ setMenuname (Menuname String) {this.menuname = Menuname; } @column (ความยาว = 30) สตริงสาธารณะ getMenuicon () {return this.menuicon; } โมฆะสาธารณะ setMenuicon (String menuicon) {this.menuicon = menuicon; } @column (ความยาว = 100) สตริงสาธารณะ getMenuurl () {return this.menuurl; } โมฆะสาธารณะ setMenuurl (สตริงเมนู url) {this.menuurl = menuurl; } @column (ความยาว = 100) สตริงสาธารณะ getMenutype () {return this.menutype; } โมฆะสาธารณะ setMenutype (String menutype) {this.menutype = menutype; } @column (ความยาว = 10) สตริงสาธารณะ getMenuorder () {return menuorder; } โมฆะสาธารณะ setMenuorder (สตริงเมนู MenerOrder) {this.menuorder = menuorder; } @column (ความยาว = 10) สตริงสาธารณะ getMenustatus () {return menustatus; } โมฆะสาธารณะ setMenustatus (String menustatus) {this.menustatus = menustatus; } @Transient Public List <เมนู> getSubmenu () {ส่งคืนเมนูย่อย; } โมฆะสาธารณะ setSubMenu (รายการ <เมนู> เมนูย่อย) {this.submenu = เมนูย่อย; } โมฆะสาธารณะ settarget (เป้าหมายสตริง) {this.target = เป้าหมาย; } @Transient Public String getTarget () {return target; } โมฆะสาธารณะ sethassubmenu (boolean hassubmenu) {this.hassubmenu = hassubmenu; } @Transient Public Boolean Gethassubmenu () {return hassubmenu; -ใช้ส่วนต่อประสาน JParePository
แพ็คเกจ org.muses.jeepatform.core.dao.repository.admin; นำเข้า org.muses.jeepatform.core.entity.admin.role; นำเข้า org.springframework.data.jpa.repository.jparepository; */ส่วนต่อประสานสาธารณะ rolerepository ขยาย jparepository <บทบาท, จำนวนเต็ม> {}ใช้ส่วนต่อประสาน JParePository
แพ็คเกจ org.muses.jeepatform.core.dao.repository.admin; นำเข้า org.muses.jeepatform.core.entity.admin.menu; นำเข้า org.springframework.data.jpa.repository.jparepository; */อินเทอร์เฟซสาธารณะ menutreerePository ขยาย jparepository <เมนู, จำนวนเต็ม> {}ระดับบริการบทบาท:
แพ็คเกจ org.muses.jeepatform.service; นำเข้า com.google.common.collect.lists; นำเข้า org.muses.jeepatform.core.dao.repository.admin.rolepagerepository; org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.data.domain.pagerequest; นำเข้า org.springframework.data.domain.sort; นำเข้า org.springframework.stereotype.service.service. 2017/7/30 */ @ServicePublic Class Rolepageservice {@autowired RolepageRepository RolerePository; / ** * สร้างวัตถุ PageRequest * @param num * @param ขนาด * @param asc * @param String * @return */ PAGEEREQUEST BUILDPAGEREQUEST (int จำนวน, ขนาด int, sort.direction asc, สตริงสตริง) {ส่งคืน pageRequest ใหม่ (num-1, ขนาด } / *** รับข้อมูลเมนูทั้งหมดและแสดงบนหน้า* @param pageno* จำนวนหน้าปัจจุบันของหน้า* @param หน้า* จำนวนหน้าต่อหน้า* @return* / หน้าสาธารณะ <role> findall (int pageno, หน้า int, sort.derction dir, string string {pagerequest Page <role> roles = rolerePository.findall (pageRequest); บทบาทกลับมา; } รายการสาธารณะ <role> findAllRole () {iteRable <role> roles = rolerePository.findall (); รายการ <role> mylist = lists.newarraylist (บทบาท); กลับ Mylist; } / ** * ค้นหาข้อมูลบทบาทตามรหัสบทบาท * @param roleid * @return * / บทบาทสาธารณะ findbyroleid (String roleid) {return rolerepository.findone (Integer.parseint (roleid)); } / *** บันทึกข้อมูลบทบาท* @param บทบาท* / โมฆะสาธารณะ Dosave (บทบาทบทบาท) {rolerepository.save (บทบาท); -คลาสบริการเมนู:
package org.muses.jeepplatform.service; นำเข้า org.muses.jeepplatform.annotation.rediscache; นำเข้า org.muses.jeepplatform.common.rediscachenamespace; นำเข้า org.muses.jeepplatform.core.dao.dao. org.muses.jeepplatform.core.entity.admin.menu; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.stereotype.service; Nicky เมื่อ 2017/6/17 */ @ServicePublic Class Menutreeservice {@autoWired MenutreerePository MenutreerEpository; /*** สอบถามเมนูทั้งหมด* @return*/@transactional // @rediscache รายการสาธารณะ <เมนู> findall () {return menutreerepository.findall (); -ในคลาสคอนโทรลเลอร์ให้ใช้ ID บทบาทเพื่อรับเมนูที่บทบาทสามารถดูได้:
/** * ข้ามไปยังหน้าการอนุญาตบทบาท * @param roleid * @param โมเดล * @return */@requestmapping (value = "/goauthorise") สตริงสาธารณะ goauth (@requestparam string roleid โมเดลโมเดล) {รายการ <เมนู> menulist = menuutreeservice.findall บทบาทบทบาท = roleservice.findbyroleid (Roleid); SET <sec Bert> hasperMissions = null; if (role! = null) {haspermissions = role.getPerMissions (); } สำหรับ (เมนู m: menulist) {สำหรับ (การอนุญาต p: haspermissions) {ถ้า (p.getmenu (). getMenuid () == m.getMenuid ()) {M.SethassubMenu (จริง); }}} model.addattribute ("Roleid", roleid); jsonArray jsonarray = jsonarray.fromobject (menulist); สตริง json = jsonarray.toString (); json = json.replaceall ("menuid", "id"). replaceall ("parentid", "pid"). replaceall ("menuname", "ชื่อ"). replaceall ("Hassubmenu", "ตรวจสอบแล้ว"); model.addattribute ("เมนู", JSON); return "admin/role/role_auth"; -ในส่วนหน้าการแสดงเมนูต้นไม้จะรับรู้ผ่าน ztree จากนั้นการอนุญาตบทบาทจะถูกนำไปใช้โดยการตรวจสอบ:
<%@ page contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> uri = "http://java.sun.com/jsp/jstl/fmt"%> <% String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerport ()+path+"/";%> <! doctype html> <html lang = "zh-cn"> <head> charset = "utf-8"/> <meta http-equiv = "x-ua-compatible" content = "ie = edge"> <meta name = "viewport" content = "width = อุปกรณ์-ความกว้างเริ่มต้น-jquary-scale = <title> src = "$ {basepath} static/js/jQuery-1.8.3.js"> </script> <!-การแนะนำ jQuery library end-> <script type = "text/javascript" src = "<%= basepath%> plugins/zdialog/zdialog.js src = "<%= basepath%> ปลั๊กอิน/zdialog/zdrag.js"> </script> <script type = "text/javascript" src = "<%= basepath%> ปลั๊กอิน/zdialog/zdrag.js"> </script> <script type = "ข้อความ/javascript" src = "<%= basepath%> ปลั๊กอิน/zdialog/zprogress.js"> </script> <link rel = "stylesheet" href = "<%= basepath%> ปลั๊กอิน/ztree/3.5/ztreestyle.css" rel = src = "<%= basepath%> ปลั๊กอิน/ztree/3.5/jQuery-1.4.4.min.js"> </script> <script type = "text/javascript" src = "<%= basepath%> plugins/script src = "<%= basepath%> ปลั๊กอิน/ztree/3.5/jQuery.ztree.excheck.js"> </script> <script type = "text/javascript"> <!- การตั้งค่า var = {{enable: true}, ข้อมูล: /*[{id: 1, pid: 0, ชื่อ: "ตรวจสอบ 1 ที่จะ", เปิด: true}, {id: 11, pid: 1, ชื่อ: "ตรวจสอบ 1-1 at will", เปิด: จริง}, {id: 12, pid: 1, ชื่อ: "ตรวจสอบ 1-2 ที่จะ" var znodes = eval (json); รหัส var; function setCheck () {var ztree = $ .fn.ztree.getZtreeObj ("treedemo"), py = $ ("#py"). attr ("ตรวจสอบ")? "p": "", sy = $ ("#sy"). attr ("ตรวจสอบ")? "s": "", pn = $ ("#pn"). attr ("ตรวจสอบ")? "p": "", sn = $ ("#sn"). attr ("ตรวจสอบ")? "s": "", type = {"y": py + sy, "n": pn + sn}; ztree.setting.check.chkboxtype = type; showcode ('sett.check.chkboxType = {"y": "' + type.y + '", "n": "' + type.n + '"};'); } function showcode (str) {if (! code) code = $ ("#code"); code.empty (); code.append ("<li>"+str+"</li>"); } $ (เอกสาร) .ready (ฟังก์ชั่น () {$ .fn.ztree.init ($ ("#treedemo"), การตั้งค่า, znodes); setCheck (); $ ("#py"). ผูก ("เปลี่ยน", setCheck); $ (#sy ") $ ("#sn"). bind ("เปลี่ยน", setCheck); //-> ฟังก์ชั่น DialogClose () {parentDialog.close (); } function dosave () {var ztree = $ .fn.ztree.getZtreeObj ("treedemo"); var nodes = ztree.getCheckedNodes (); var tmpnode; var ids = ""; สำหรับ (var i = 0; i <nodes.length; i ++) {tmpNode = โหนด [i]; if (i! = nodes.length-1) {ids += tmpnode.id +","; } else {ids += tmpnode.id; }} var roleid = $ {roleid}; var params = roleid +";" +ids; การแจ้งเตือน (ID); $ .ajax ({ประเภท: "โพสต์", url: 'บทบาท/uibition.do', ข้อมูล: {params: params, tm: วันที่ใหม่ (). getTime ()}, dataType: 'JSON', แคช: เท็จ, ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) DodialogClose (); } </script> </head> <body> <div> <div><ul id = "Treedemo"> </ul> </div> </div> <อินพุต type = "ปุ่ม" onclick = "dosave ()" value = "save"/> type = "button" value = "close"/> </body> </html>ลิงค์โครงการโอเพนซอร์ส GitHub ของทีม: https://github.com/u014427391/jeepatform
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น