コード例 #1
0
 /// <summary>
 /// 获取当前用户所有权限
 /// </summary>
 /// <returns></returns>
 public List <Permission> GetCurrPermission()
 {
     return(CacheAccess.GetCurrentUserPermission(_administratorContract, _permissionContract));
 }
コード例 #2
0
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            bool resul = false;

            // string area = httpContext.Request.RequestContext.RouteData.DataTokens["area"].ToString();

            string control = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
            string action  = httpContext.Request.RequestContext.RouteData.Values["action"].ToString();


            var permission = _permissionContract.Permissions.FirstOrDefault(c => c.ControllName == control && c.ActionName == action && c.IsEnabled && !c.IsDeleted);

            /* 2016-4-20 yxk
             * 如果当前权限对应的模块已经完成了权限的添加操作 则判断用户是否有该权限
             * 如果当前权限对应的模块未完成权限的添加操作,不考虑用户是否具有该权限
             */
            if (permission != null)
            {
                httpContext.Items.Add("_ruledes", permission.Description);
                if (permission.Module.IsCompleteRule)
                {
                    //当前用户的所有权限
                    List <Permission> currentUserPermi = CacheAccess.GetCurrentUserPermission(_administratorContract, _permissionContract);


                    //当前模块的所有权限
                    var currModulePermission = CacheAccess.GetPermissions(_permissionContract).Where(c => c.ModuleId == permission.ModuleId && c.IsEnabled && !c.IsDeleted).ToList();
                    //当前用户在当前模块具有的权限
                    var currUserPermiForCurrModule = currentUserPermi.Where(c => currModulePermission.Select(g => g.Id).Contains(c.Id)).ToList();
                    //当前用户在当前模块不具有的权限
                    var currUserNoPermiForCurrModule =
                        currModulePermission.Where(c => !(currentUserPermi.Select(g => g.Id).Contains(c.Id))).ToList();
                    var invali = currUserNoPermiForCurrModule.Where(c => !string.IsNullOrEmpty(c.OnlyFlag)).Select(c => c.OnlyFlag).ToList();
                    httpContext.Items.Remove("_inval_role");
                    httpContext.Items.Add("_inval_role", invali);
                    //具有该权限
                    resul = currentUserPermi.Any(c => c.Id == permission.Id);
                }
                else
                {
                    //未完成权限添加
                    resul = true;
                }
            }
            else
            {//当前连接未加入权限控制
                resul = true;
            }

            return(resul);
            //var moduId = CacheAccess.GetModules(_moduleContract).Where(c => c.PageController.ToLower() == control.ToLower() && c.IsDeleted == false && c.IsEnabled == true).Select(c => c.Id).FirstOrDefault();


            //if (moduId != 0)
            //{
            //List<Permission> perli = CacheAccess.GetPermissions(_permissionContract).Where(c => c.ControllName == control &&c.ActionName==action&& !c.IsDeleted  && c.IsEnabled ).ToList();
            //List<Permission> currentUserPermi = CacheAccess.GetCurrentUserPermission(_administratorContract);
            //if (currentUserPermi != null)
            //{
            //当前用户的所有权限
            // List<int> currperids = currentUserPermi.Select(c => c.Id).ToList();
            //当前用户在当前模块所具有的权限
            // List<Permission> curModulePer = perli.Where(c => currperids.Contains(c.Id)).ToList();


            //当前用户在当前模块不具有的权限
            //List<Permission> noperli = new List<Permission>();
            //foreach (var curp in perli)
            //{
            //    if (noperli.Count == 0)
            //        noperli = perli;
            //    noperli = noperli.Where(c => c.ModuleId != curp.ModuleId && c.ActionName != curp.ActionName).ToList();

            //}

            //List<Permission> curModuleNoPer = perli.Where(c => !currperids.Contains(c.Id)).ToList();
            //List<Permission> curModuleNoPer = perli.Where(c => !currperids.Contains(c.Id)).ToList();

            //var invali = curModuleNoPer.Where(c => !string.IsNullOrEmpty(c.OnlyFlag)).Select(c => c.OnlyFlag).ToList();
            //httpContext.Items.Remove("_inval_role");
            //httpContext.Items.Add("_inval_role", invali);
            //var nopers = curModuleNoPer.Any(c => c.ModuleId == moduId && c.ActionName == action);
            //if (!nopers)
            //{

            //    resul = true;
            //}
            //test
            //if (requrl.Contains("Products/Product/List"))
            //    resul = false;

            // }

            //}
        }