You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

216 regels
8.1 KiB

  1. using Learun.DataBase.Repository;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace Learun.Application.Base.Files
  6. {
  7. /// <summary>
  8. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  9. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  10. /// 创 建:超级管理员
  11. /// 日 期:2019-11-28 09:23
  12. /// 描 述:文件权限管理
  13. /// </summary>
  14. public class FileAuthService: RepositoryFactory
  15. {
  16. #region 获取数据
  17. /// <summary>
  18. /// 获取文件夹权限
  19. /// </summary>
  20. /// <param name="id">文件夹id</param>
  21. /// <returns></returns>
  22. public IEnumerable<FileAuthEntity> GetFList(string id)
  23. {
  24. var strSql = new StringBuilder();
  25. strSql.Append(" select * from lr_base_fileauth t ");
  26. strSql.Append(" where F_Type = 0 AND t.F_FileInfoId = @F_FileInfoId ");
  27. return this.BaseRepository().FindList<FileAuthEntity>(strSql.ToString(), new { F_FileInfoId = id });
  28. }
  29. /// <summary>
  30. /// 获取授权信息列表
  31. /// </summary>
  32. /// <param name="F_FileInfoId">文件信息主键</param>
  33. /// <returns></returns>
  34. public IEnumerable<FileAuthEntity> GetList(string F_FileInfoId)
  35. {
  36. var strSql = new StringBuilder();
  37. strSql.Append(" select * from lr_base_fileauth t ");
  38. strSql.Append(" where F_Type = 0 AND t.F_FileInfoId = @F_FileInfoId ");
  39. return this.BaseRepository().FindList<FileAuthEntity>(strSql.ToString(), new { F_FileInfoId });
  40. }
  41. /// <summary>
  42. /// 实体数据
  43. /// </summary>
  44. /// <param name="keyValue">主键</param>
  45. /// <returns></returns>
  46. public FileAuthEntity GetEntity(string keyValue)
  47. {
  48. return this.BaseRepository().FindEntity<FileAuthEntity>(keyValue);
  49. }
  50. #endregion
  51. #region 提交数据
  52. /// <summary>
  53. /// 删除数据
  54. /// </summary>
  55. /// <param name="keyValue">主键</param>
  56. public void DeleteEntity(string keyValue) {
  57. var db = this.BaseRepository().BeginTrans();
  58. try
  59. {
  60. db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ", new { fromId = keyValue });
  61. db.Delete<FileAuthEntity>(new FileAuthEntity() { F_Id = keyValue });
  62. db.Commit();
  63. }
  64. catch (Exception)
  65. {
  66. db.Rollback();
  67. throw;
  68. }
  69. }
  70. /// <summary>
  71. /// 保存数据
  72. /// </summary>
  73. /// <param name="keyValue">主键</param>
  74. /// <param name="entity">实体数据</param>
  75. public bool SaveEntity(string keyValue, FileAuthEntity entity) {
  76. var db = this.BaseRepository().BeginTrans();
  77. try
  78. {
  79. if (string.IsNullOrEmpty(keyValue))
  80. {
  81. var entityTmp = db.FindEntity<FileAuthEntity>(" select * from lr_base_fileauth where F_ObjId = @objId AND F_FileInfoId = @Id AND F_Type = 0 ", new { objId = entity.F_ObjId, Id = entity.F_FileInfoId });
  82. if (entityTmp != null) {
  83. db.Rollback();
  84. return false;
  85. }
  86. entity.Create();
  87. db.Insert(entity);
  88. }
  89. else
  90. {
  91. entity.Modify(keyValue);
  92. db.Update(entity);
  93. }
  94. db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ",new { fromId = entity.F_Id });
  95. int deep = 1;
  96. if (entity.F_IsFolder == 1)// 文件夹
  97. {
  98. if (entity.F_FileInfoId != "0") {
  99. var folderEntity = db.FindEntity<FolderEntity>(entity.F_FileInfoId);
  100. SaveSJEntity(folderEntity.F_PId, entity.F_Id, entity, deep, db);
  101. }
  102. // 授权子文件夹和文件
  103. SaveXJEntity(entity.F_FileInfoId, entity.F_Id, entity, deep, db);
  104. }
  105. else
  106. {
  107. var fileEntity = db.FindEntity<FileBInfoEntity>(entity.F_FileInfoId);
  108. SaveSJEntity(fileEntity.F_Folder, entity.F_Id, entity, deep, db);
  109. }
  110. db.Commit();
  111. return true;
  112. }
  113. catch (System.Exception)
  114. {
  115. db.Rollback();
  116. throw;
  117. }
  118. }
  119. /// <summary>
  120. /// 保存上级目录权限设置
  121. /// </summary>
  122. /// <param name="folderId"></param>
  123. /// <param name="fromId"></param>
  124. /// <param name="fromEntity"></param>
  125. /// <param name="deep"></param>
  126. /// <param name="db"></param>
  127. private void SaveSJEntity(string folderId,string fromId, FileAuthEntity fromEntity,int deep, IRepository db) {
  128. if (folderId != "0") {
  129. FileAuthEntity entity = new FileAuthEntity()
  130. {
  131. F_Id = Guid.NewGuid().ToString(),
  132. F_AuthType = "1",
  133. F_FileInfoId = folderId,
  134. F_from = fromId,
  135. F_ObjId = fromEntity.F_ObjId,
  136. F_ObjName = fromEntity.F_ObjName,
  137. F_ObjType = fromEntity.F_ObjType,
  138. F_Time = fromEntity.F_Time,
  139. F_Type = 2,
  140. F_IsFolder = 1,
  141. F_Level = deep
  142. };
  143. db.Insert(entity);
  144. var folderEntity = db.FindEntity<FolderEntity>(folderId);
  145. SaveSJEntity(folderEntity.F_PId, fromId, fromEntity,deep + 1, db);
  146. }
  147. }
  148. /// <summary>
  149. /// 保存下级目录权限设置
  150. /// </summary>
  151. /// <param name="folderId"></param>
  152. /// <param name="fromId"></param>
  153. /// <param name="fromEntity"></param>
  154. /// <param name="deep"></param>
  155. /// <param name="db"></param>
  156. private void SaveXJEntity(string folderId, string fromId, FileAuthEntity fromEntity,int deep, IRepository db)
  157. {
  158. // 获取文件
  159. var fileList = db.FindList<FileBInfoEntity>(" select * from lr_base_fileinfo where F_IsPublish = 1 AND F_Folder = @folderId ", new { folderId });
  160. foreach (var item in fileList) {
  161. FileAuthEntity fileAuth = new FileAuthEntity()
  162. {
  163. F_Id = Guid.NewGuid().ToString(),
  164. F_AuthType = fromEntity.F_AuthType,
  165. F_FileInfoId = item.F_Id,
  166. F_from = fromId,
  167. F_ObjId = fromEntity.F_ObjId,
  168. F_ObjName = fromEntity.F_ObjName,
  169. F_ObjType = fromEntity.F_ObjType,
  170. F_Time = fromEntity.F_Time,
  171. F_Type = 1,
  172. F_IsFolder = 0,
  173. F_Level = deep
  174. };
  175. db.Insert(fileAuth);
  176. }
  177. // 获取文件夹
  178. var folderList = db.FindList<FolderEntity>(" select * from lr_base_folder where F_PId = @folderId ", new { folderId });
  179. foreach (var item in folderList) {
  180. FileAuthEntity folderAuth = new FileAuthEntity()
  181. {
  182. F_Id = Guid.NewGuid().ToString(),
  183. F_AuthType = fromEntity.F_AuthType,
  184. F_FileInfoId = item.F_Id,
  185. F_from = fromId,
  186. F_ObjId = fromEntity.F_ObjId,
  187. F_ObjName = fromEntity.F_ObjName,
  188. F_ObjType = fromEntity.F_ObjType,
  189. F_Time = fromEntity.F_Time,
  190. F_Type = 1,
  191. F_IsFolder = 1,
  192. F_Level = deep
  193. };
  194. db.Insert(folderAuth);
  195. SaveXJEntity(item.F_Id, fromId, fromEntity,deep + 1,db);
  196. }
  197. }
  198. #endregion
  199. }
  200. }