You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DSWMS/开发版dev/Vue.NetCore/Vue.Net/VOL.Core/Filters/ActionPermissionAttribute.cs

85 lines
3.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using VOL.Core.Enums;
using VOL.Core.Extensions;
namespace VOL.Core.Filters
{
public class ActionPermissionAttribute : TypeFilterAttribute
{
public ActionPermissionAttribute(bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
Arguments = new object[] { new ActionPermissionRequirement() { IsApi = isApi } };
}
/// <summary>
/// 限定角色访问
/// </summary>
/// <param name="roles"></param>
public ActionPermissionAttribute(int roleId, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
Arguments = new object[] { new ActionPermissionRequirement() { RoleIds = new int[] { roleId }, IsApi = isApi } };
}
public ActionPermissionAttribute(ActionRolePermission actionRolePermission, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
Array array = Enum.GetValues(typeof(ActionRolePermission));
List<int> roles = new List<int>();
foreach (ActionRolePermission item in array)
{
if (actionRolePermission.HasFlag(item))
{
roles.Add((int)item);
}
}
Arguments = new object[] { new ActionPermissionRequirement() { RoleIds = roles.ToArray(), IsApi = isApi } };
}
/// <summary>
/// 限定角色访问
/// </summary>
/// <param name="roles"></param>
public ActionPermissionAttribute(int[] roleIds, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
Arguments = new object[] { new ActionPermissionRequirement() { RoleIds = roleIds, IsApi = isApi } };
}
public ActionPermissionAttribute(string tableName, ActionPermissionOptions tableAction, bool sysController = false, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
this.SetActionPermissionRequirement(tableName, tableAction, sysController, isApi);
}
public ActionPermissionAttribute(string tableName, string roleIds, ActionPermissionOptions tableAction, bool sysController = false, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
this.SetActionPermissionRequirement(tableName, tableAction, (roleIds ?? "").Split(",").Select(x => x.GetInt()).ToArray(), sysController, isApi);
}
public ActionPermissionAttribute(ActionPermissionOptions tableAction, bool isApi = false)
: base(typeof(ActionPermissionFilter))
{
this.SetActionPermissionRequirement("", tableAction, true, isApi);
}
private void SetActionPermissionRequirement(string tableName, ActionPermissionOptions tableAction,
int[] roleId, bool sysController = false, bool isApi = false)
{
Arguments = new object[] { new ActionPermissionRequirement() {
SysController=sysController,
TableAction=tableAction.ToString(),
TableName=tableName,
IsApi = isApi,
RoleIds=roleId
} };
}
private void SetActionPermissionRequirement(string tableName, ActionPermissionOptions tableAction, bool sysController = false, bool isApi = false, int? roleId = null)
{
SetActionPermissionRequirement(tableName, tableAction, roleId == null ? null : new int[] { (int)roleId }, sysController, isApi);
}
}
}