fix webapi 未设置代码生成 Load加载数据报错,MVC页面没有代码生成界面 https://gitee.com/yubaolee/OpenAuth.Core/issues/I4RLEP

This commit is contained in:
yubaolee 2022-02-21 00:39:55 +08:00
parent 3f077f5d80
commit ac0dfef321
8 changed files with 71 additions and 10 deletions

View File

@ -40,7 +40,8 @@ namespace OpenAuth.App
{ {
throw new CommonException("登录已过期", Define.INVALID_TOKEN); throw new CommonException("登录已过期", Define.INVALID_TOKEN);
} }
var columnFields = loginContext.GetTableColumns("<%=Table.Name%>"); //如果是WebAPI,请务必改为loginContext.GetTableColumns("<%=Table.Name%>");
var columnFields = loginContext.GetTableColumnsFromDb("<%=Table.Name%>");
if (columnFields == null || columnFields.Count == 0) if (columnFields == null || columnFields.Count == 0)
{ {
throw new Exception("请在代码生成界面配置Category表的字段属性"); throw new Exception("请在代码生成界面配置Category表的字段属性");

View File

@ -73,6 +73,17 @@ namespace OpenAuth.App
{ {
return _strategy.GetTableColumns(moduleCode); return _strategy.GetTableColumns(moduleCode);
} }
/// <summary>
/// 获取角色可访问的字段信息因为MVC版本没有代码生成器所以只能通过直接读取数据库表结构的方式
/// </summary>
/// <param name="moduleCode"></param>
/// <returns></returns>
[Obsolete("获取角色可访问的字段信息因为MVC版本没有代码生成器所以只能通过直接读取数据库表结构的方式")]
public List<BuilderTableColumn> GetTableColumnsFromDb(string moduleCode)
{
return _strategy.GetTableColumnsFromDb(moduleCode);
}
} }

View File

@ -149,6 +149,24 @@ namespace OpenAuth.App
return allprops.Where(u => props.Contains(u.ColumnName)).ToList(); return allprops.Where(u => props.Contains(u.ColumnName)).ToList();
} }
public List<BuilderTableColumn> GetTableColumnsFromDb(string moduleCode)
{
var allprops = _dbExtension.GetTableColumnsFromDb(moduleCode);
//如果是系统模块直接返回所有字段。防止开发者把模块配置成系统模块还在外层调用loginContext.GetProperties("xxxx");
bool? isSysModule = UnitWork.FirstOrDefault<Module>(u => u.Code == moduleCode)?.IsSys;
if (isSysModule!= null && isSysModule.Value)
{
return allprops.ToList();
}
var props =UnitWork.Find<Relevance>(u =>
u.Key == Define.ROLEDATAPROPERTY && _userRoleIds.Contains(u.FirstId) && u.SecondId == moduleCode)
.Select(u => u.ThirdId);
return allprops.Where(u => props.Contains(u.ColumnName)).ToList();
}
//用户角色 //用户角色
public NormalAuthStrategy(IUnitWork<OpenAuthDBContext> unitWork, IRepository<User,OpenAuthDBContext> repository, DbExtension dbExtension) : base(unitWork, repository,null) public NormalAuthStrategy(IUnitWork<OpenAuthDBContext> unitWork, IRepository<User,OpenAuthDBContext> repository, DbExtension dbExtension) : base(unitWork, repository,null)

View File

@ -98,6 +98,11 @@ namespace OpenAuth.App
return UnitWork.Find<BuilderTableColumn>(u => u.TableName.ToLower() == moduleCode.ToLower()).ToList(); return UnitWork.Find<BuilderTableColumn>(u => u.TableName.ToLower() == moduleCode.ToLower()).ToList();
} }
public List<BuilderTableColumn> GetTableColumnsFromDb(string moduleCode)
{
return _dbExtension.GetTableColumnsFromDb(moduleCode);
}
public SystemAuthStrategy(IUnitWork<OpenAuthDBContext> unitWork, IRepository<User,OpenAuthDBContext> repository, DbExtension dbExtension) : base(unitWork, repository, null) public SystemAuthStrategy(IUnitWork<OpenAuthDBContext> unitWork, IRepository<User,OpenAuthDBContext> repository, DbExtension dbExtension) : base(unitWork, repository, null)
{ {

View File

@ -34,13 +34,14 @@ namespace OpenAuth.App
} }
/// <summary> /// <summary>
/// 获取数据库一个表的所有属性值及属性描述 /// 通过实体获取字段定义因为MVC版本没有代码生成界面只能通过这种方式
/// </summary> /// </summary>
/// <param name="moduleName">模块名称/表名</param> /// <param name="moduleName">模块名称/表名</param>
/// <returns></returns> /// <returns></returns>
public List<KeyDescription> GetProperties(string moduleName) [Obsolete("因为MVC版本没有代码生成界面只能通过这种方式")]
public List<BuilderTableColumn> GetTableColumnsFromDb(string moduleName)
{ {
var result = new List<KeyDescription>(); var result = new List<BuilderTableColumn>();
const string domain = "openauth.repository.domain."; const string domain = "openauth.repository.domain.";
IEntityType entity = null; IEntityType entity = null;
_contexts.ForEach(u => _contexts.ForEach(u =>
@ -67,12 +68,13 @@ namespace OpenAuth.App
{ {
typeName = Nullable.GetUnderlyingType(property.PropertyType).Name; typeName = Nullable.GetUnderlyingType(property.PropertyType).Name;
} }
result.Add(new KeyDescription result.Add(new BuilderTableColumn
{ {
Key = property.Name, ColumnName = property.Name,
Description = description, TableName = moduleName,
Browsable = browsable, Comment = description,
Type = typeName IsList = browsable,
ColumnType = typeName
}); });
} }

View File

@ -46,6 +46,13 @@ namespace OpenAuth.App
/// <param name="moduleCode"></param> /// <param name="moduleCode"></param>
/// <returns></returns> /// <returns></returns>
List<BuilderTableColumn> GetTableColumns(string moduleCode); List<BuilderTableColumn> GetTableColumns(string moduleCode);
/// <summary>
/// 获取角色可访问的字段信息因为MVC版本没有代码生成器所以只能通过直接读取数据库表结构的方式
/// </summary>
/// <param name="moduleCode"></param>
/// <returns></returns>
[Obsolete("获取角色可访问的字段信息因为MVC版本没有代码生成器所以只能通过直接读取数据库表结构的方式")]
List<BuilderTableColumn> GetTableColumnsFromDb(string moduleCode);
} }
} }

View File

@ -16,7 +16,7 @@ namespace OpenAuth.App.Test
var app = _autofacServiceProvider.GetService<DbExtension>(); var app = _autofacServiceProvider.GetService<DbExtension>();
var result = app.GetProperties("Category"); var result = app.GetTableColumnsFromDb("Category");
Console.WriteLine(JsonHelper.Instance.Serialize(result)); Console.WriteLine(JsonHelper.Instance.Serialize(result));
} }

View File

@ -1,8 +1,11 @@
using System; using System;
using System.Data;
using System.Linq; using System.Linq;
using Infrastructure; using Infrastructure;
using Microsoft.Data.SqlClient;
using NUnit.Framework; using NUnit.Framework;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using MySqlConnector;
using OpenAuth.Repository.Domain; using OpenAuth.Repository.Domain;
using OpenAuth.Repository.Interface; using OpenAuth.Repository.Interface;
@ -24,5 +27,19 @@ namespace OpenAuth.Repository.Test
Console.WriteLine(JsonHelper.Instance.Serialize(users)); Console.WriteLine(JsonHelper.Instance.Serialize(users));
} }
/// <summary>
/// 测试Mysql执行存储过程
/// </summary>
[Test]
public void ExecProcedureWithParam()
{
var unitWork = _autofacServiceProvider.GetService<IUnitWork<OpenAuthDBContext>>();
var param = new MySqlParameter("keyword", SqlDbType.NVarChar);
param.Value = "test%";
var users = unitWork.ExecProcedure<User>("sp_alluser", new []{param});
Console.WriteLine(JsonHelper.Instance.Serialize(users));
}
} }
} }