Планируется добавить функции конфигурации разрешения в проекты с открытым исходным кодом и планирует добавить Ztree для реализации структуры дерева.
Ссылка на проект с открытым исходным кодом команды: https://github.com/u014427391/jeepatform Welcome STAR (Collection)
Ztree-это многофункциональный «плагин дерева», реализованный JQuery. Отличная производительность, гибкая конфигурация и комбинация нескольких функций являются самыми большими преимуществами Ztree.
Ztree Скачать Ссылка: http://www.treejs.cn/v3/main.php#_ztreeinfo
Ролевая информационная организация класс:
Пакет org.muses.jeepatform.core.entity.admin; импорт javax.persistence. 2017*/@Таблица (name = "sys_role")@entitypublic Class Role реализует serializable {/** идентификатор роли **/private int roleid; / ** Описание роли **/ частная строка Roledesc; / ** Имя роли **/ частная строка Rolename; / ** Флаг роли **/ частная строковая роль; Частный набор <разрешение> разрешения = новый хэшсет <разрешение> (); @ID @GeneratedValue (стратегия = GenerationType.identity) public int getRoleid () {return roleid; } public void setroleid (int roleid) {this.roleid = roleid; } @Column (длина = 100) public String getroLedesc () {return roledesc; } public void setroLedesc (String roledesc) {this.Roledesc = roLEDESC; } @Column (длина = 100) public String getRolename () {return rolename; } public void setRolename (string rolename) {this.Rolename = roLename; } @Column (длина = 100) public String getRole () {return Role; } public void setrole (строковая роль) {this.role = role; } // Модифицируйте каскадную политику в каскадные отношения @onetomany (targetentity = разрешение. Inversejoincolumns =@joincolumn (name = "rescissionId", ссылка на ColumnName = "id", уникальный = true)) public set <разрешение> getPermissions () {return разрешения; } public void setpermissions (set <разрешение> разрешения) {this.permissions = permissions; } @Override public boolean equals (Object obj) {if (obj exanceOf role) {Ролевая роль = (Роль) obj; вернуть this.Roleid == (role.getRoleid ()) && this.Rolename.equals (role.getRolename ()) && this.roledesc.equals (role.getRoledesc ()) && this.role.equals (role.getRole ()); } вернуть super.equals (obj); }}Информация о разрешении класс объекта:
пакет org.muses.jeepatform.core.entity.admin; import java.io.serializable; импорт java.util.hashset; import java.util.set; импорт javax.persistence.cascadetype; импорт javax.persistence.column; импорт. javax.persistence.fetchtype; import javax.persistence.generatedValue; импорт javax.persistence.generationtype; импорт javax.persistence.id; импорт javax.persistence.joincolumn; import javax.persistence.jointable; import javax.persistence.manyToman; javax.persistence.onetoone; import javax.persistence.table;/*** @description Vo Class для операции разрешения* @author nicky* @date 6 марта 2017*/ @таблица (name = "sys_permission") @entitypubbublic Class Recumments Serizeblesable {private int id; Private String Pdesc; Приватное название строки; Частный статический конечный длинный SerialVersionuid = 1L; частное меню меню; частный набор <Perains> Operations = новый хэшсет <операция> (); public разрешение () {super (); } @GeneratedValue (стратегия = GenerationType.identity) @id public int getId () {return this.id; } public void setId (int id) {this.id = id; } @Column (длина = 100) public String getPdesc () {return this.pdesc; } public void setPdesc (String pdesc) {this.pdesc = pdesc; } @Column (длина = 100) public String getName () {return this.name; } public void setName (string name) {this.name = name; } @Onetoone (targetentity = menu.class, cascade = cascadetype.refresh, fetch = fetchtype.eager) @joincolumn (name = "menuid", ссылка на Menuid ") Публичное меню getmenu () {return Menu; } public void setmenu (меню меню) {this.menu = menu; } @Manytomany (TargetEntity = Operation.Class, cascade = cascadetype.merge, fetch = fetchtype.eager) @Jointable (name = "sys_permission_operation", joincolumns =@joincolumn (name = "rescissionId", ссылка " } public void setOperations (set <Operation> Operations) {this.Operations = Operations; }}Реализовать класс информационных объектов меню, используя JPA для его реализации
пакет org.muses.jeepatform.core.entity.admin; импорт javax.persistence. { / ** Меню идентификатор ** / private int menuid; / ** Superior Id **/ private int parentid; / ** Имя меню **/ Private String Menuname; / ** Значок меню **/ Private String Menuicon; / ** Меню URL **/ Private String Menuurl; / ** Тип меню **/ Private String Menutype; / ** Меню сортировка **/ частное строковое меню; / ** Статус меню **/ частная строка Menustatus; частный список <меню> подменю; частная строковая цель; Частный логический Hassubmenu = false; Публичное меню () {super (); } @ID @GeneratedValue (стратегия = GenerationType.identity) public int getMenuId () {return this.menuid; } public void setmenUid (int menuid) {this.menuid = menuid; } @Column (длина = 100) public int getParentId () {return parentId; } public void setParentId (int parentId) {this.parentid = parentId; } @Column (длина = 100) public String getMenuname () {return this.menuname; } public void setmenUname (String menuname) {this.menuname = menuname; } @Column (длина = 30) public String getMenUicon () {return this.menuicon; } public void setmenUicon (String menuicon) {this.menuicon = menuicon; } @Column (длина = 100) public String getMenUurl () {return this.menuurl; } public void setmenUurl (String Menuurl) {this.menuurl = menuurl; } @Column (длина = 100) public String getMenUtype () {return this.menutype; } public void setMenUtype (String menutype) {this.menutype = menutype; } @Column (длина = 10) public String getMenUorder () {return Menuorder; } public void setmenUorder (строковое меню) {this.MenuOrder = MenuOder; } @Column (длина = 10) public String getMeNustatus () {return menustatus; } public void setMeNustatus (String menustatus) {this.menustatus = menustatus; } @Transient Public List <Menu> getSubmenu () {return saper; } public void setSubMenu (list <Menu> saper) {this.submenu = sumenu; } public void settarget (String Target) {this.Target = target; } @Transient public String getTarget () {return Target; } public void 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;/*** Создан Ники на 2017/12/12/2. */Public Interface Rolepository Extends JParePository <Роль, целое число> {}Реализовать интерфейс JparePository
пакет org.muses.jeepatform.core.dao.repository.admin; импорт org.muses.jeepatform.core.entity.admin.menu; импорт org.springframework.data.jpa.repository.jparepository;/*** Создан Ники на 2017/17. */public interface menutreeRepository расширяет jparePository <меню, целое число> {}Ролевой сервисный класс:
пакет org.muses.jeepatform.service; import com.google.common.collect.lists; import org.muses.jeepatform.core.dao.repository.admin.RolePagerePository; импорт org.muses.jeepatform.core.Entity.Admin.Role; org.springframework.beans.factory.annotation.autowired; импорт org.springframework.data.domain.pagerequest; import org.springframework.data.domain.sort; импорт org.springframework.stereotype.service; импорт java.Util.List. */ @ServicePublic Class RolePageService {@autowired rolepagerePository RoleRepository; / ** * Построить объект pageRequest * @param num * @param size * @param asc * @param string * @return */ private pagerequest buildpagerequest (int num, int size, sort.direction asc, string string) {return new pagerequest (num-1, размер, нулевой, строка); } /** * Get all menu information and display it on pages* @param pageNo * Current number of pages* @param pageSize * Number of pages per page* @return */ public Page<Role> findAll(int pageNo, int pageSize, Sort.Direction dir, String str){ PageRequest pageRequest = buildPageRequest(pageNo, pageSize, dir, str); Page <Роль> Роли = rolepository.findall (pageRequest); вернуть роли; } public List <Lele> findAllRole () {iterable <Sole> roles = roleRepository.findall (); Список <Роль> mylist = lists.newarraylist (роли); вернуть mylist; } / ** * Найти информацию о роле на основе идентификатора роли * @param roleid * @return * / public Role findbyRoleid (String Roleid) {return rolerepository.findone (integer.parseint (roleid)); } / *** Сохранить информацию о роле* @param Роль* / public void dosave (роль роли) {roLeRePository.save (ROLE); }}Класс услуг меню:
пакет org.muses.jeepplatform.service; import org.muses.jeepplatform.annotation.rediscache; импорт org.muses.jeepplatform.common.rediscachenamespace; import org.muses.jeepplatform.core.dao.repository.admin.menretreporyportorm.core.dao.repository.admin.menetrepory.core.Dao.Repository.admin.museReporyform.core.Dao.Repository.admin.museReporporm.core.Dao.Repository.admin.museRepormor org.muses.jeepplatform.core.entity.admin.menu; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.stereoty.service; импорт org.spramework.transaction.annotation.transaction.tormy.trance.traint. 2017/6/17. */ @ServicePublic Class MenutReeservice {@Autowired MenutreeRepository menutreeRepository; /*** Запросить все меню* @return*/@transactional // @rediscache public list <menu> findall () {return menutreerepository.findall (); }}В классе контроллера используйте идентификатор роли, чтобы получить меню, которое может просмотреть роль:
/** * Страница авторизации роли * @param roleid * @param model * @return */@requestmapping (value = "/goauthorise") public String goAuth (@RequestParam String Roleid, модель модели) {Список <menu> menust = menutreeservice.findall (); Роль Роль = ROLESVICE.FINDBYROLEID (Roleid); Установить <разрешение> haspermissions = null; if (role! = null) {haspermissions = role.getpermissions (); } для (меню m: меналистик) {for (разрешение P: haspermissions) {if (p.getmenu (). getmenuid () == m.getmenuid ()) {m.sethassubmenu (true); }}} model.addattribute ("Roleid", Roleid); Jsonarray jsonarray = jsonarray.fromobject (меналистик); String json = jsonarray.toString (); json = json.replaceall ("menuid", "id"). rayalll ("parentid", "pid"). rellaceall ("menuname", "name"). Replaceall ("hassubmenu", "проверено"); model.addattribute («меню», JSON); вернуть "admin/role/role_auth"; }В передней части, дисплей меню деревьев реализуется через Ztree, а затем разрешение на роль реализуется путем проверки:
<%@ page contentype = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <%@ prefix = "fmt" 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"> <голова> <base href = "<%= basepath%>" rel-nof nof nof nof nof nof nof nof nof nof nof noflol charset = "utf-8"/> <meta http-equiv = "x-ua-совместимый" content = "ie = edge"> <meta name = "viewport" content = "width = width-width, начальная шкала = 1"> <Title> Вставьте заголовок здесь </title> <!-Представление библиотеки jquery bybrary-> <script type = "text/javascript" javascript "javascript" src="${basePath}static/js/jquery-1.8.3.js"></script> <!-- Introducing JQuery library end --> <script type="text/javascript" src="<%=basePath%>plugins/zDialog/zDialog.js"></script> <script type="text/javascript" src = "<%= basepath%> plugins/zdialog/zdrag.js"> </script> <script type = "text/javascript" src = "<%= basepath%> plugins/zdialog/zdrag.js"> </script> <script type = "javascript" src = "<%= basepath%> плагины/zdialog/zprogress.js"> </script> <link rel = "stylesship" href = "<%= basepath%> plugins/ztree/3,5/ztreestyle.css" rel = "enfollow" type = "text/css"> <script/javascript "javascript = javascript" javascript "javascript". src = "<%= basepath%> плагины/ztree/3,5/jquery -1.4.4.min.js"> </script> <script type = "text/javascript" src = "<%= basepath%> plugins/ztree/3.5/jquery.ztree.core.js"> </script> <script = jquery.ztree.core.js " src = "<%= basepath%> plugins/ztree/3.5/jquery.ztree.excheck.js"> </script> <script type = "text/javascript"> <!- var petting = {check: {enable: true}, data: {simpledata: {enable:}}}, allback: {onlclick: {{inclick: {{{onlck: {{inclick:} {{{inclick:}} /*[{id: 1, pid: 0, name: «Проверьте 1 по желанию», Open: true}, {id: 11, pid: 1, имя: «Проверьте 1-1 по желанию», Open: true}, {id: 12, pid: 1, имя: «Проверьте 1-2 по желанию», Open: true}];*/ var json = $ {menus}; var Znodes = eval (json); var code; function setcheck () {var ztree = $ .fn.ztree.getztreeobj ("triedemo"), py = $ ("#py"). attr ("cherced")? "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 ('sten.check.chkboxtype = {"y": "' + type.y + '", "n": "' + type.n + '"};'); } function showcode (str) {if (! code) code = $ ("#code"); code.empty (); code.append ("<li>"+str+"</li>"); } $ (document) .ready (function () {$ .fn.ztree.init ($ ("#triedemo"), setting, Znodes); setcheck (); $ ("#py"). Bind ("изменение", setcheck); $ ("#sy"). Bind («изменение», setcheck); $ ("#sn"). Bind ("Изменение", Setcheck); //-> function dialogClose () {parentdialog.close (); } function dosave () {var ztree = $ .fn.ztree.getztreeobj ("triedemo"); var nodes = ztree.getcheckednodes (); var tmpnode; var ids = ""; for (var i = 0; i <nodes.length; i ++) {tmpnode = nodes [i]; if (i! = nodes.length-1) {ids += tmpnode.id +","; } else {ids += tmpnode.id; }} var roleid = $ {roleid}; var params = roleid +";" +ids; оповещение (IDS); $ .ajax ({type: «post», url: 'role/atutorise.do', data: {params: params, tm: new date (). gettime ()}, dataType: 'json', кэш: false, успех: функция (данные) {if ("успех" = data.Result) {alert ('Authorifizization была успешной! dodialogclose (); } </script> </head> <body> <div> <div> <ul id = "triedemo"> </ul> </div> </div> <input type = "кнопка" onclick = "dosave ()" value = "save"/> <input onclick = "dialogClose ();" type = "button" value = "close"/> </body> </html>Ссылка на проект с открытым исходным кодом команды: https://github.com/u014427391/jeepatform
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.