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 } }; } /// /// 限定角色访问 /// /// 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 roles = new List(); foreach (ActionRolePermission item in array) { if (actionRolePermission.HasFlag(item)) { roles.Add((int)item); } } Arguments = new object[] { new ActionPermissionRequirement() { RoleIds = roles.ToArray(), IsApi = isApi } }; } /// /// 限定角色访问 /// /// 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); } } }