Il est prévu d'ajouter des fonctions de configuration d'autorisation aux projets open source et prévoit d'ajouter Ztree pour implémenter une structure d'arbre.
Lien du projet Open Source de l'équipe de l'équipe: https://github.com/u014427391/jeepatform Welcome Star (Collection)
Ztree est un "plug-in" arborescence "multifonctionnel implémenté par jQuery. Excellentes performances, configuration flexible et combinaison de plusieurs fonctions sont les plus grands avantages de Ztree.
Ztree Lien de téléchargement: http://www.treejs.cn/v3/main.php#_ztreeinfo
Classe d'entité d'information sur le rôle:
Package org.muses.jeepatform.core.entity.admin; import javax.persistence. *; import java.io.serializable; import java.util.hashset; import java.util.set; / ** * @description role information class * @Author nicky * @date mars 16, 2017 * / @ table (name = "sys_role") @ EntityPublic Class Rôle implémente Serializable {/ ** Rôle ID ** / private int roleId; / ** Description du rôle ** / STRACHE PRIVÉ ROLEDESC; / ** Nom du rôle ** / private String rolename; / ** Flag de rôle ** / rôle de chaîne privée; Private Set <mormission> Autorisations = new HashSet <mormission> (); @Id @GeneratedValue (Strategy = GenerationType.Identity) public int getroleID () {return RoleId; } public void setRoleid (int roleId) {this.roleid = roleId; } @Column (Longueur = 100) String public getroleDesC () {return roleDesc; } public void SetRoleDesc (String RoleDesc) {this.roledecs = roleSc; } @Column (longueur = 100) String public getroLeName () {return roleName; } public void setRoLeName (String rolename) {this.rolename = rolename; } @Column (longueur = 100) String public getROLE () {return Role; } public void setRole (String Role) {this.role = role; } // Modifiez la stratégie Cascade à la relation Cascade @onetomany (ciblentity = permission.class, cascade = Cascadetype.merge, fetch = fetchtype.eager) @jointable (name = "sys_role_permission", joinculumns = @ joincolumn (named = "roleid", référencé Collumnname = "RoleID"), inverseJoincolumns = @ joincumn (name = "permissionId", référencéColumnname = "id", unique = true)) public set <mormission> getperMissions () {return permissions; } public void setPerMissions (set <murefting> permissions) {this.permissions = autorisation; } @Override public booléan equals (objet obj) {if (obj instanceof role) {role role = (role) obj; return this.roleid == (role.getroleid ()) && this.rolename.equals (role.getrolename ()) && this.roledecs.equals (role.getroledesc ()) && this.role.equals (role.getRole ()); } return super.equals (obj); }}Classe d'entité d'information d'autorisation:
package org.ruses.jeepatform.core.entity.admin; import java.io.serializable; import java.util.hashset; import java.util.set; import javax.persistence.cascadetype; import javax.persistence.column; import javax.persistence.entity; import javax. javax.persistence.generatedValue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.joincumn; import javax.persistence.jointable; import javax.persistence.manytomany; import javax.persistence.onetoone; import javax.persistence.table; / ** * @description VO Classe pour l'opération d'autorisation * @author nicky * @Date 6 mars 2017 * / @ table (name = "sys_permission") @ entityPublic Class Permission implémente sérialisable {private int id; chaîne privée PDESC; nom de chaîne privé; Long SerialVersionUID privé statique statique = 1L; menu de menu privé; set privé <Late Operation> Operations = new HashSet <Loreplier> (); Autorisation publique () {super (); } @GeneratedValue (Strategy = GenerationType.Identity) @id public int getID () {return this.id; } public void setid (int id) {this.id = id; } @Column (longueur = 100) String public getPDESC () {return this.pdesc; } public void SetPDesc (String pDESC) {this.pdesc = pdesc; } @Column (longueur = 100) String public getName () {return this.name; } public void setName (string name) {this.name = name; } @OnetoOne (cibleTentity = menu.class, Cascade = CascadeType.Refresh, fetch = fetchType.eager) @joincumn (name = "menuID", référencéColumnName = "MenuID") Menu public getMenu () {return menu; } public void setMenu (menu menu) {this.menu = menu; } @Manytomany (ciblentity = operation.class, cascade = CascadeType.merge, fetch = fetchType.eager) @Jointable (name = "sys_permission_operation", joinculumns = @ joincumn (name = "permissionid", référencécomnname = "id"), inversejoincumns = @ joincumn (name = "operationId", référencécolumnname = "id")) public set <operation> getoperations () {return opérations; } public void setOperations (set <Laterial> opérations) {this.operations = opérations; }}Implémentez la classe d'entité d'information du menu, en utilisant JPA pour les implémenter
Package org.ruses.jeepatform.core.entity.admin; import javax.persistence. *; import java.io.serializable; import java.util.list; / ** * @description menu Information entity * @Author Nicky * @date marse 17, 2017 * / @ table (namelizer @ menu @ menu @ table @ trentepublic menu Menuil Iplules = "sys_menu") @ tarity / ** ID de menu ** / private int menuID; / ** ID supérieur ** / private int parentid; / ** Nom du menu ** / private String menuname; / ** Icône du menu ** / String privé menuIcon; / ** URL de menu ** / chaîne privée menuUrl; / ** Type de menu ** / menutype de chaîne privée; / ** Sort de menu ** / Menu de chaîne privée; / ** État du menu ** / chaîne privée Menustatus; LISTE PRIVATE <UNAY> SOMMENU; cible de chaîne privée; booléen privé hassubmenu = false; Menu public () {super (); } @Id @GeneratedValue (Strategy = GenerationType.Identity) public int getMenuid () {return this.menuid; } public void setMenuid (int menuID) {this.menuid = menuID; } @Column (longueur = 100) public int getParentId () {return parentid; } public void setParentId (int parentid) {this.parentid = parentid; } @Column (longueur = 100) String public getMenuname () {return this.menuname; } public void setMenuname (String menuname) {this.menuname = menuname; } @Column (longueur = 30) String public getMenuiCon () {return this.MenuiCon; } public void setMenuiCon (String menuIcon) {this.MenuiCon = menuIcon; } @Column (longueur = 100) String public getMenuurl () {return this.menuurl; } public void setMenuurl (String menuUrl) {this.menuurl = menuUrl; } @Column (longueur = 100) String public getMenutype () {return this.Menutype; } public void setMenutype (menutype de chaîne) {this.meutype = menutype; } @Column (longueur = 10) String public getMenuorder () {return menuder; } public void setMenuOrder (String menuOrder) {this.MenOrder = menuOrder; } @Column (Longueur = 10) String public getMenUstatus () {return Menustatus; } public void setMenUstatus (String Menustatus) {this.menustatus = Menustatus; } @Transient Public List <ennu> getSubMenu () {return SubMenu; } public void setSubMenu (list <ennu> subMenu) {this.subMenu = subMenu; } public void Settarget (String Target) {this.target = cible; } @Transient Public String getTarget () {return Target; } public void sethassubmenu (booléen hassubmenu) {this.hassubmenu = hassubmenu; } @Transient Public Boolean GethassubMenu () {return hassubmenu; }}Implémentez l'interface JParePository
package org.muses.jeepatform.core.dao.repository.admin; import org.mus.jeepatform.core.entity.admin.role; import org.springframework.data.jpa.repository.jparepository; / ** * créé par Nicky le 2017/12/2. * / interface publique RoleRepository étend JParepository <Role, entier> {}Implémentez l'interface JParePository
package org.muses.jeepatform.core.dao.repository.admin; import org.mus.jeepatform.core.entity.admin.menu; import org.springframework.data.jpa.repository.jparepository; / ** * créé par Nicky en 2017/6/17. * / Interface publique MenuTreeRepository étend JParePository <menu, entier> {}Classe de service de rôle:
package org.ruses.jeepatform.service; import com.google.common.collect.lists; import org.muses.jeepatform.core.dao.repository.admin.rolepagerepository; import org.springframework.beans.factory.annotation.autowired; import org.springframework.data.domain.pageRequest; import org.springframework.data.domain.sort; import org.springframework.sterreotype.svice; import java.util.list; / ** * créé by nicky/7/7/7. * / @ ServicePublic Class RolePageService {@Autowired RolePageRepository RoleRepository; / ** * Build PageRequest objet * @param num * @param size * @param asc * @param string * @return * / private pagerequest buildPageRequest (int num, int size, tri, null, string); } / ** * Obtenez toutes les informations du menu et affichez-les sur les pages * @param pageno * Nombre actuel de pages * @param pagesize * Nombre de pages par page * @return * / PAME PAMBRE <Role> findall (int pageno, int pageSize, Sort.Direction Dirime, String Str) {PageRequest PageRequest = BuildPagerest (PageNo, pagesize, pagerequest = buildPagerest (PageNo, pagesize, great, str); Page <role> rôles = roleRepository.Findall (pageRequest); rôles de retour; } public list <role> findallRole () {iTable <role> rôles = roleRepository.Findall (); List <role> myList = lists.newArrayList (rôles); retourner myList; } / ** * Trouver des informations sur le rôle basées sur l'id de rôle * @param roleID * @return * / public Role FindByRoleId (String RoleID) {return roleRepository.FindOne (Integer.ParseInt (RoleId)); } / ** * Enregistrer les informations sur le rôle * @param role * / public void dosave (rôle de rôle) {roleRepository.save (rôle); }}Classe de service de menu:
package org.muses.jeepplatform.service; import org.muses.jeepplatform.annotation.rediscache; import org.muses.jeepplatform.common.rediscacheatespace; import org.muses.jeepplatform.core. org.muses.jeepplatform.core.entity.admin.menu; import org.springframework.beans.factory.annotation.autowired; import org.springframework.sterreotype.servce; import org.springframework.transaction.annotation.transactional; import Java.Util.list; ** ** sur le bynotation. 2017/6/17. * / @ ServicePublic class MenutreEservice {@autowired menutreeRoSitory menUTreeRepository; / ** * Recherche tous les menus * @return * / @transactional // @ rediscache publique List <ennu> findall () {return menutreepository.findall (); }}Dans la classe du contrôleur, utilisez l'ID de rôle pour obtenir le menu que le rôle peut afficher:
/ ** * Page d'autorisation des rôles * @param roleid * @param modèle * @return * / @requestmapping (value = "/ goAuthorise") public String GoAuth (@RequestParam String RoleId, modèle modèle) {list <menu> menulist = menutreeService.Findall (); Rôle de rôle = roleService.FindByroleID (RoleID); Set <permission> haspermissions = null; if (role! = null) {hasperMissions = role.getPerMissions (); } pour (menu m: Menulist) {pour (autorisation p: haspermisessions) {if (p.getMenu (). getMenuid () == M.GetMenuid ()) {M.SethAsSubMenu (true); }}} Model.AddAttribute ("RoleId", RoleId); JSONArray JSONArray = JSONArray.fromObject (Menulist); String JSON = JSONArray.ToString (); JSON = JSON.ReplaceALL ("MenuId", "ID"). RempaceALL ("ParentId", "PID"). RempaceALL ("Menuname", "Name"). RempaceALL ("HassubMenu", "vérifié"); Model.AddAttribute ("Menus", JSON); return "admin / role / role_auth"; }Dans l'avant, l'affichage du menu d'arbre est réalisé via Ztree, puis l'autorisation des rôles est implémentée en vérifiant:
<% @ page ContentType = "text / html; charset = utf-8" pageencoding = "utf-8"%> <% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <% @ taglib 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"> <adread> <base href = "<% = basepath %>" rel = "external nofollow"> <aafol charset = "utf-8" /> <meta http-equiv = "x-ua-compatible" contenu = "ie = edge"> <meta name = "Viewport" contenu = "width = device-width, initial-sale = 1"> <title> insert title ici </ title> <! - Introduction de la bibliothèque JQuery -> <script type = "text / javascript" src = "$ {basepath} static / js / jQuery-1.8.3.js"> </ script> <! - Introduisant la bibliothèque jQuery end -> <script type = "text / javascrip src = "<% = basepath%> plugins / zDialog / zdrag.js"> </ script> <script type = "text / javascript" src = "<% = basepath%> plugins / zDialog / zdrag.js"> </ script> <script type = "text / javascript" src = "<% = baspath%> plugins / zDialog / zprogress.js"> </ script> <link rel = "Stylesheet" href = "<% = basepath%> plugins / ztree / 3.5 / ztreestyle.css" rel = "external nofollow" type = "text / css"> <script type = "text / javascript" src = "<% = basepath%> plugins / ztree / 3.5 / jQuery-1.4.4.min.js"> </ script> <script type = "Text / javascrip src = "<% = baspath%> plugins / ztree / 3.5 / jQuery.ztree.excheck.js"> </ script> <script type = "text / javascript"> <! - var setting = {check: {activer: true}, data: {simpledata: {}}}; / * [{id: 1, pid: 0, nom: "Check 1 at will", ouvrir: true}, {id: 11, pid: 1, nom: "vérifier 1-1 at will", ouvrir: true}, {id: 12, pid: 1, nom: "check 1-2 at will", open: true}]; * / var json = $ {menus}; var zNodes = eval (json); code var; fonction setCheck () {var ztree = $ .fn.ztree.getzTreeOBj ("Treedemo"), py = $ ("# py"). att ("vérifié")? "p": "", sy = $ ("# sy"). att ("vérifié")? "s": "", pn = $ ("# pn"). attr ("vérifié")? "p": "", sn = $ ("# sn"). attr ("vérifié")? "s": "", type = {"y": py + sy, "n": pn + sn}; ztree.setting.check.chkboxType = type; showcode ('setting.check.chkboxType = {"y": "' + type.y + '", "n": "' + type.n + '"};'); } fonction showcode (str) {if (! code) code = $ ("# code"); Code.Empty (); code.append ("<li>" + str + "</li>"); } $ (document) .ready (function () {$ .fn.ztree.init ($ ("# triEDEMO"), paramètre, zNodes); setCheck (); $ ("# py"). bind ("modifier", setCheck); $ ("# sy"). "Change", setCheck); $ ("# pn"). $ ("# sn"). bind ("change", setCheck);}); // -> fonction dialogClose () {parentDialog.close (); } fonction dosave () {var ztree = $ .fn.ztree.getzTreeObj ("Treedemo"); var nœuds = zTree.getCheckEdNodes (); var tmpNode; var ids = ""; pour (var i = 0; i <nœuds.length; i ++) {tmpnode = nœuds [i]; if (i! = nœuds.length-1) {ids + = tmpnode.id + ","; } else {ids + = tmpnode.id; }} var roleId = $ {roleId}; var params = roleID + ";" + ids; alerte (ids); $ .ajax ({type: "Post", URL: 'Role / Authorise.do', données: {params: params, tm: new Date (). GetTime ()}, DataType: 'JSON', Cache: False, Success: Function (Data) {if ("Success" == Data.Result) {alert (Autorisation a réussi! DodialogClose ();} else {alert ("Autorisation a échoué!"); } </ script> </ head> <body> <div> <div> <ul id = "triedemo"> </ul> </div> </div> <input type = "Button" onClick = "DOSAVE ()" value = "Save" /> <input onClick = "Dialogclose ();" type = "Button" value = "close" /> </ body> </html>Lien du projet Open Source de l'équipe de l'équipe: https://github.com/u014427391/jeepatform
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.