/// <summary>写日志</summary> /// <param name="type">类型</param> /// <param name="action">操作</param> /// <param name="remark">备注</param> public virtual void WriteLog(Type type, String action, String remark) { if (!Config.GetConfig <Boolean>("NewLife.CommonEntity.WriteEntityLog", true)) { return; } if (type == null) { type = this.GetType(); } var user = Current; var factory = ManageProvider.Get <ILog>(); var log = factory.Create(type, action); if (user != null) { log.UserID = user.ID; log.UserName = user.ToString(); } log.Remark = remark; log.Save(); }
/// <summary>根据权限名(权限路径)找到权限菜单实体</summary> /// <param name="name">名称</param> /// <returns></returns> public IMenu FindPermissionMenu(string name) { var factory = ManageProvider.Get <IMenu>(); // 优先使用当前页,除非当前页与权限名不同 var entity = factory.Current; if (entity != null && entity.Permission == name) { return(entity); } // 根据权限名找 return(factory.FindForPerssion(name)); }
/// <summary>初始化时执行必要的权限检查,以防万一管理员无法操作</summary> static void CheckRole() { //var rs = Meta.Cache.Entities; // InitData中用缓存将会导致二次调用InitData,从而有一定几率死锁 var rs = FindAll(); var list = rs.ToList(); // 如果某些菜单已经被删除,但是角色权限表仍然存在,则删除 var factory = ManageProvider.Get <IMenu>(); var eop = ManageProvider.GetFactory <IMenu>(); var ids = eop.FindAllWithCache().GetItem <Int32>("ID").ToArray(); foreach (var role in rs) { if (!role.CheckValid(ids)) { XTrace.WriteLine("删除[{0}]中的无效资源权限!", role); role.Save(); } } var sys = list.FirstOrDefault(e => e.IsSystem); if (sys == null) { return; } // 如果没有任何角色拥有权限管理的权限,那是很悲催的事情 var count = 0; var nes = factory.GetType().GetValue("Necessaries", false) as Int32[]; foreach (var item in nes) { if (!list.Any(e => e.Has(item, PermissionFlags.All))) { count++; sys.Set(item, PermissionFlags.All); } } if (count > 0) { XTrace.WriteLine("共有{0}个必要菜单,没有任何角色拥有权限,准备授权第一系统角色[{1}]拥有其完全管理权!", count, sys); sys.Save(); } }