示例#1
0
 public SysPathRule GetRule(int id)
 {
     using (BizDataContext context = new BizDataContext(true))
     {
         SysPathRule            rule = context.FindById <SysPathRule>(new object[] { id });
         List <SysPathRuleItem> list = context.Where <SysPathRuleItem>(p => p.PathRuleId == id);
         foreach (SysPathRuleItem item in list)
         {
             if (item.ItemType == PathRuleMasterType.Role)
             {
                 rule.Roles.Add(item.ObjectId);
             }
             else
             {
                 rule.Users.Add(item.ObjectId);
             }
         }
         return(rule);
     }
 }
示例#2
0
 private void UrlAuthorizate(IOwinContext context)
 {
     try
     {
         string str = context.Request.Path.Value;
         if (string.IsNullOrWhiteSpace(str))
         {
             context.Response.StatusCode = 0x194;
             context.Response.WriteAsync("The page is NotFound.");
         }
         else
         {
             IPrincipal principal = context.Request.User;
             if (!(((principal != null) && (principal.Identity != null)) && principal.Identity.IsAuthenticated))
             {
                 context.Authentication.SignOut(new string[] { "ExternalCookie" });
                 context.Response.Redirect("~/Home/Login");
             }
             else
             {
                 ClaimsIdentity identity = principal.Identity as ClaimsIdentity;
                 if (identity == null)
                 {
                     context.Authentication.SignOut(new string[] { "ExternalCookie" });
                     context.Response.Redirect("~/Home/Login");
                 }
                 else
                 {
                     SysUser userData = identity.GetUserData();
                     if (userData == null)
                     {
                         context.Authentication.SignOut(new string[] { "ExternalCookie" });
                         context.Response.Redirect("~/Home/Login");
                     }
                     else
                     {
                         bool          flag  = false;
                         SysPathRule[] rules = RuleLoader.GetRules();
                         if ((rules == null) || (rules.Length == 0))
                         {
                             Next.Invoke(context);
                         }
                         else
                         {
                             for (int i = 0; i < rules.Length; i++)
                             {
                                 SysPathRule rule = rules[i];
                                 if (str.StartsWith(rule.Path))
                                 {
                                     if (rule.Users.Contains(userData.User_ID))
                                     {
                                         flag = true;
                                         break;
                                     }
                                     if (rule.Roles.Count > 0)
                                     {
                                         foreach (int num2 in rule.Roles)
                                         {
                                             if (principal.IsInRole(num2.ToString()))
                                             {
                                                 flag = true;
                                                 break;
                                             }
                                         }
                                     }
                                 }
                             }
                             if (flag)
                             {
                                 Next.Invoke(context);
                             }
                             else
                             {
                                 context.Response.StatusCode = 0x193;
                                 context.Response.WriteAsync("禁止访问.");
                             }
                         }
                     }
                 }
             }
         }
     }
     catch (Exception exception)
     {
         context.Response.StatusCode = 500;
         context.Response.WriteAsync("服务器错误:" + exception);
     }
 }