ow
This commit is contained in:
commit
f05d2d215f
678 files changed
+73865
No files matched your search
@@ -0,0 +1,140 @@
|
||||
using CloudBuilder.Core.DependencyInjection.Form;
|
||||
using CloudBuilder.Core.DependencyInjection.Request;
|
||||
using CloudBuilder.Security.Data;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace CloudBuilder.Security.Utility
|
||||
{
|
||||
public static class LoginContextExtensions
|
||||
{
|
||||
public static bool Assert(this LoginContext loginContext, string permissionName)
|
||||
{
|
||||
return Assert(loginContext, permissionName, Operate.None);
|
||||
}
|
||||
public static bool Assert(this LoginContext loginContext, string permissionName, string operate)
|
||||
{
|
||||
Operate op = Enum.Parse<Operate>(operate);
|
||||
return Assert(loginContext, permissionName, op);
|
||||
}
|
||||
|
||||
public static bool Assert(this LoginContext loginContext, string permissionName, Operate operate)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
switch (operate)
|
||||
{
|
||||
case Operate.None:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName) == true;
|
||||
case Operate.Find:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && x.ViewIndc == Operate.Find.ToString()) == true;
|
||||
case Operate.Insert:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && x.CreateIndc == Operate.Insert.ToString()) == true;
|
||||
case Operate.Update:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && x.AmendIndc == Operate.Insert.ToString()) == true;
|
||||
case Operate.Delete:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && x.DeleteIndc == Operate.Insert.ToString()) == true;
|
||||
default:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName) == true;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool AssertDependents(this LoginContext loginContext, string permissionName, string dependent)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent) == true;
|
||||
}
|
||||
}
|
||||
|
||||
public class LoginContextPermission
|
||||
{
|
||||
private readonly IContext loginContext;
|
||||
private IServiceProvider ServiceProvider { get; }
|
||||
public LoginContextPermission()
|
||||
{
|
||||
ServiceProvider = ApplicationServiceContext.ServiceProvider;
|
||||
loginContext = ServiceProvider.GetService<IContext>()!;
|
||||
}
|
||||
|
||||
public bool Assert(string permissionName)
|
||||
{
|
||||
return Assert(permissionName, Operate.None);
|
||||
}
|
||||
public bool Assert(string permissionName, string operate)
|
||||
{
|
||||
Operate op = Enum.Parse<Operate>(operate);
|
||||
return Assert(permissionName, op);
|
||||
}
|
||||
|
||||
public bool Assert(string permissionName, Operate operate)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
switch (operate)
|
||||
{
|
||||
case Operate.None:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName) == true;
|
||||
case Operate.Find:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && YesNoPolicy.IsYes(x.ViewIndc)) == true;
|
||||
case Operate.Insert:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && YesNoPolicy.IsYes(x.CreateIndc)) == true;
|
||||
case Operate.Update:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && YesNoPolicy.IsYes(x.AmendIndc)) == true;
|
||||
case Operate.Delete:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName && YesNoPolicy.IsYes(x.DeleteIndc)) == true;
|
||||
default:
|
||||
return permissionInfo.Permissions?.Any(x => x.PermissionName == permissionName) == true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool AssertDependents(string permissionName, string dependent)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent) == true;
|
||||
}
|
||||
|
||||
public bool AssertDependents(string permissionName, string dependent, Operate operate)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
switch (operate)
|
||||
{
|
||||
case Operate.None:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent) == true;
|
||||
case Operate.Find:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent && YesNoPolicy.IsYes(x.ViewIndc)) == true;
|
||||
case Operate.Insert:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent && YesNoPolicy.IsYes(x.CreateIndc)) == true;
|
||||
case Operate.Update:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent && YesNoPolicy.IsYes(x.AmendIndc)) == true;
|
||||
case Operate.Delete:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent && YesNoPolicy.IsYes(x.DeleteIndc)) == true;
|
||||
default:
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent) == true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool AssertByFunctionName(string pageName)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
|
||||
return Assert(permissionInfo.PermissionFunctionMaps.Where(x => x.PageName == pageName).FirstOrDefault()?.PermissionName!, Operate.None);
|
||||
}
|
||||
public bool AssertByFunctionName(string pageName, string operate)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
Operate op = Enum.Parse<Operate>(operate);
|
||||
return Assert(permissionInfo.PermissionFunctionMaps.Where(x => x.PageName == pageName).FirstOrDefault()?.PermissionName!, op);
|
||||
}
|
||||
|
||||
public bool AssertByFunctionName(string pageName, Operate operate)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
return Assert(permissionInfo.PermissionFunctionMaps.Where(x => x.PageName == pageName).FirstOrDefault()?.PermissionName!, operate);
|
||||
}
|
||||
|
||||
public bool AssertDependentsByFunctionName(string pageName, string dependent)
|
||||
{
|
||||
SecurityUserPermissionInfo permissionInfo = loginContext.GetPermissionInfo();
|
||||
string permissionName = permissionInfo.PermissionFunctionMaps.Where(x => x.PageName == pageName).FirstOrDefault()?.PermissionName!;
|
||||
return permissionInfo.PermissionDependents?.Any(x => x.PermissionName == permissionName && x.DependentDetailName == dependent) == true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using CloudBuilder.Core.DatabaseAccessor.Entity;
|
||||
using CloudBuilder.Core.Service;
|
||||
using CloudBuilder.Security.Entity;
|
||||
|
||||
namespace CloudBuilder.Security.Utility
|
||||
{
|
||||
public class ValidateHelper
|
||||
{
|
||||
public static void Validate(IApplicationService service, dynamic data, string tableName)
|
||||
{
|
||||
List<SysTableSchemaViewEntity> sysTableSchemas = service.GetRepository<IRepository<SysTableSchemaViewEntity>>().DetachedEntities.Where(x => x.TableName == tableName).ToList();
|
||||
ValidateHelper.ValidateString(data, sysTableSchemas.ToArray());
|
||||
}
|
||||
|
||||
public static void ValidateString(dynamic dynamic, SysTableSchemaViewEntity[] sysTableSchemas)
|
||||
{
|
||||
// 获取所有实体有效属性
|
||||
var props = dynamic.GetType().GetProperties();
|
||||
// 获取实体当前(现在)的值
|
||||
|
||||
SysTableSchemaViewEntity sysTableSchema;
|
||||
long maxLength = 0;
|
||||
string desName = null;
|
||||
// 遍历所有属性
|
||||
foreach (var prop in props)
|
||||
{
|
||||
// 获取属性名
|
||||
var propName = prop.Name;
|
||||
sysTableSchema = sysTableSchemas.Where(x => x.FieldName.Replace("_", "").ToLower() == propName.ToLower()).FirstOrDefault();
|
||||
|
||||
if (sysTableSchema == null) continue;
|
||||
|
||||
if (sysTableSchema.TypeOfName != "string") continue;
|
||||
|
||||
if (string.IsNullOrEmpty(prop.GetValue(dynamic, null))) continue;
|
||||
|
||||
maxLength = sysTableSchema.MaxLength;
|
||||
|
||||
object[] objs = prop.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), true);
|
||||
desName = propName;
|
||||
if (objs != null && objs.Length > 0) desName = ((System.ComponentModel.DescriptionAttribute)objs[0]).Description;
|
||||
|
||||
if (((string)prop.GetValue(dynamic, null)).Length > maxLength)
|
||||
{
|
||||
throw new ValidatedException(string.Format("{0}长度不能超过【{1}】字符.", desName, maxLength));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user