QiFeng.ZWY.MagWeb/Filter/PermissionFilterAttribute.cs

(完整代码) 2KB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using QiFeng.LMSD.Bll;
using QiFeng.LMSD.Model;
using QiFeng.LMSD.Model.Dto;

namespace QiFeng.LMSD.MagWeb
{
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
    public class PermissionFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var hasRight = false;
            var controller = (string)filterContext.RouteData.Values["controller"];
            var action = (string)filterContext.RouteData.Values["action"];
            var currentAccount = HttpContext.Current.Session["McAccounts"] as ViewMcAccountDto;

            var allowedModules = GetAllowedModules(currentAccount);

            if (currentAccount != null && (allowedModules != null && currentAccount.RoleId != 1))
            {
                foreach (var t in allowedModules)
                {
                    if (String.Equals(t.Controller, controller, StringComparison.CurrentCultureIgnoreCase) &&
                        String.Equals(t.Action, action, StringComparison.CurrentCultureIgnoreCase))
                    {
                        hasRight = true;
                        break;
                    }
                }
            }
            else
            {
                // 如果是超级用户 直接返回 获取所有操作权限
                hasRight = true;
            }

            if (hasRight)
                return;

            filterContext.HttpContext.Response.Write("<script type='text/javascript'>alert('无访问权限,请联系您的上级管理员!'); location.href = '/Home/Index';</script>");
            filterContext.Result = new EmptyResult();
        }

        /// <summary>
        /// 获取当前用户所有有权限执行的动作
        /// </summary>
        /// <returns></returns>
        private List<Modules> GetAllowedModules(ViewMcAccountDto accountInfo)
        {
            var lsModuleIds = JurisdictionBll.Instance.GetModelListByRoleId(accountInfo.RoleId).Select(x => x.ModuleId).ToList();

            return lsModuleIds.Select(moduleId => ModulesBll.Instance.GetModel(moduleId)).ToList();
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。