// Path: src/main/java/com/belling/base/layerui/NavNode.java
// @Data
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder
// public class NavNode implements Serializable {
// 
// 	/**
// 	 * 序列化ID
// 	 */
// 	private static final long serialVersionUID = -3690553973115479338L;
// 	
// 	/** 垂直导航栏 标题  **/
// 	private String title;
// 	
// 	/** 垂直导航栏 ICON  **/
// 	private String icon;
// 	
// 	/** 垂直导航栏 是否展开 **/
// 	private boolean spread;
// 	
// 	/** 垂直导航栏 是否展开 **/
// 	private Collection<NavChild> children;
// }
// 
// Path: src/main/java/com/belling/base/service/BaseService.java
// public interface BaseService<T extends PersistentObject, ID extends Serializable> {
// 
// 	/**
// 	 * 查询所有分页
// 	 * 
// 	 * @param p
// 	 * @return
// 	 */
// 	public Pagination<T> findByAllPagination(Pagination<T> p);
// 
// 	/**
// 	 * 通过主键查询实体
// 	 * 
// 	 * @param PK pk
// 	 * @return T
// 	 */
// 	public T get(ID pk);
// 
// 	/**
// 	 * 通过主键集合查询实体
// 	 * 
// 	 * @param List <PK> pks
// 	 * @return List<T>
// 	 */
// 	public List<T> get(Collection<ID> pks);
// 
// 	/**
// 	 * 插入/更新实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void save(T t);
// 
// 	/**
// 	 * 插入/更新实体集合
// 	 * 
// 	 * @param List <T> ts
// 	 */
// 	public void save(Collection<T> ts);
// 
// 	/**
// 	 * 更新实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void update(T t);
// 
// 	/**
// 	 * 更新实体集合
// 	 * 
// 	 * @param List  <T> ts
// 	 */
// 	public void update(Collection<T> ts);
// 
// 	/**
// 	 * 删除实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void delete(T t);
// 
// 	/**
// 	 * 删除实体集合
// 	 * 
// 	 * @param List <T> ts
// 	 */
// 	public void delete(Collection<T> ts);
// 
// 	/**
// 	 * 通过主键删除实体
// 	 * 
// 	 * @param PK pk
// 	 * @return T
// 	 */
// 	public void deleteById(ID id);
// 
// 	/**
// 	 * 通过主键集合删除实体 注：这里别把List改为Collection，会导致覆盖方法的List<ID>调用不到
// 	 * 
// 	 * @param List <PK> pks
// 	 * @return List<T>
// 	 */
// 	public void deleteById(List<ID> idList);
// }


import java.util.List;
import com.belling.admin.model.Permission;
import com.belling.base.layerui.NavNode;
import com.belling.base.service.BaseService;
package com.belling.admin.service;



/**
 * 权限服务接口
 * 
 * @author Sunny
 */
public interface PermissionService extends BaseService<Permission, Integer> {

	/**
	 * 根据名称和应用ID查询
	 * @param name 权限名称
	 * @param appId 应用ID
	 * @return
	 */
	public List<Permission> findByName(String name, Boolean isEnable);
	
	/**
	 * 删除权限
	 * @param id 权限ID
	 * @return
	 */
	public void deletePermission(Integer id);
	
	/**
	 * 根据角色查询权限
	 * 
	 * @param roleId 角色ID
	 * @return
	 */
	public List<String> findPermissionsByRoleId(Integer roleId);
	
	
	/**
	 * 查询用户权限
	 * 
	 * @param userId 用户ID
	 * @return
	 */
	public List<Permission> findListByUserId(Integer userId);
	
	
	/**
	 * 转成LayerUI的NAV数据格式
	 * 
	 * @param userId
	 * @return
	 */
// Path: src/main/java/com/belling/base/layerui/NavNode.java
// @Data
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder
// public class NavNode implements Serializable {
// 
// 	/**
// 	 * 序列化ID
// 	 */
// 	private static final long serialVersionUID = -3690553973115479338L;
// 	
// 	/** 垂直导航栏 标题  **/
// 	private String title;
// 	
// 	/** 垂直导航栏 ICON  **/
// 	private String icon;
// 	
// 	/** 垂直导航栏 是否展开 **/
// 	private boolean spread;
// 	
// 	/** 垂直导航栏 是否展开 **/
// 	private Collection<NavChild> children;
// }
// 
// Path: src/main/java/com/belling/base/service/BaseService.java
// public interface BaseService<T extends PersistentObject, ID extends Serializable> {
// 
// 	/**
// 	 * 查询所有分页
// 	 * 
// 	 * @param p
// 	 * @return
// 	 */
// 	public Pagination<T> findByAllPagination(Pagination<T> p);
// 
// 	/**
// 	 * 通过主键查询实体
// 	 * 
// 	 * @param PK pk
// 	 * @return T
// 	 */
// 	public T get(ID pk);
// 
// 	/**
// 	 * 通过主键集合查询实体
// 	 * 
// 	 * @param List <PK> pks
// 	 * @return List<T>
// 	 */
// 	public List<T> get(Collection<ID> pks);
// 
// 	/**
// 	 * 插入/更新实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void save(T t);
// 
// 	/**
// 	 * 插入/更新实体集合
// 	 * 
// 	 * @param List <T> ts
// 	 */
// 	public void save(Collection<T> ts);
// 
// 	/**
// 	 * 更新实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void update(T t);
// 
// 	/**
// 	 * 更新实体集合
// 	 * 
// 	 * @param List  <T> ts
// 	 */
// 	public void update(Collection<T> ts);
// 
// 	/**
// 	 * 删除实体
// 	 * 
// 	 * @param T t
// 	 */
// 	public void delete(T t);
// 
// 	/**
// 	 * 删除实体集合
// 	 * 
// 	 * @param List <T> ts
// 	 */
// 	public void delete(Collection<T> ts);
// 
// 	/**
// 	 * 通过主键删除实体
// 	 * 
// 	 * @param PK pk
// 	 * @return T
// 	 */
// 	public void deleteById(ID id);
// 
// 	/**
// 	 * 通过主键集合删除实体 注：这里别把List改为Collection，会导致覆盖方法的List<ID>调用不到
// 	 * 
// 	 * @param List <PK> pks
// 	 * @return List<T>
// 	 */
// 	public void deleteById(List<ID> idList);
// }


// Path: src/main/java/com/belling/admin/service/PermissionService.java
import java.util.List;
import com.belling.admin.model.Permission;
import com.belling.base.layerui.NavNode;
import com.belling.base.service.BaseService;

package com.belling.admin.service;



/**
 * 权限服务接口
 * 
 * @author Sunny
 */
public interface PermissionService extends BaseService<Permission, Integer> {

	/**
	 * 根据名称和应用ID查询
	 * @param name 权限名称
	 * @param appId 应用ID
	 * @return
	 */
	public List<Permission> findByName(String name, Boolean isEnable);
	
	/**
	 * 删除权限
	 * @param id 权限ID
	 * @return
	 */
	public void deletePermission(Integer id);
	
	/**
	 * 根据角色查询权限
	 * 
	 * @param roleId 角色ID
	 * @return
	 */
	public List<String> findPermissionsByRoleId(Integer roleId);
	
	
	/**
	 * 查询用户权限
	 * 
	 * @param userId 用户ID
	 * @return
	 */
	public List<Permission> findListByUserId(Integer userId);
	
	
	/**
	 * 转成LayerUI的NAV数据格式
	 * 
	 * @param userId
	 * @return
	 */
	public List<NavNode> getNavMenu(Integer userId);