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);
}
var columnFields = loginContext.GetTableColumns("<%=Table.Name%>");
//如果是WebAPI,请务必改为loginContext.GetTableColumns("<%=Table.Name%>");
var columnFields = loginContext.GetTableColumnsFromDb("<%=Table.Name%>");
if (columnFields == null || columnFields.Count == 0)
{
throw new Exception("请在代码生成界面配置Category表的字段属性");

View File

@ -73,6 +73,17 @@ namespace OpenAuth.App
{
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();
}
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)

View File

@ -98,6 +98,11 @@ namespace OpenAuth.App
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)
{

View File

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

View File

@ -46,6 +46,13 @@ namespace OpenAuth.App
/// <param name="moduleCode"></param>
/// <returns></returns>
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 result = app.GetProperties("Category");
var result = app.GetTableColumnsFromDb("Category");
Console.WriteLine(JsonHelper.Instance.Serialize(result));
}

View File

@ -1,8 +1,11 @@
using System;
using System.Data;
using System.Linq;
using Infrastructure;
using Microsoft.Data.SqlClient;
using NUnit.Framework;
using Microsoft.Extensions.DependencyInjection;
using MySqlConnector;
using OpenAuth.Repository.Domain;
using OpenAuth.Repository.Interface;
@ -24,5 +27,19 @@ namespace OpenAuth.Repository.Test
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));
}
}
}