小编Sav*_*ngh的帖子

从 Active Directory 进行身份验证,但在 MVC 中从 SQL 数据库中授权角色

我是 MVC 的新手。我搜索并没有找到适合我要求的解决方案。

我正在开发一个供我们团队内部使用的门户网站,它使用 Windows AD 身份验证进行登录。但是,对于基于角色的访问,我创建了一个本地数据库,该数据库可以返回用户的角色详细信息。我创建了一个自定义授权过滤器,允许我根据用户的角色处理授权。此过滤器从 DB 查询详细信息,但是这种方法的问题是,它会尝试从 DB 获取对控制器的每个请求的详细信息,这使得它变得昂贵。

如何将从数据库获取的用户详细信息保存在令牌中,这样我就不必为每个请求查询数据库并使用授权过滤器中的令牌值。此外,我可以使用从数据库中为用户检索的值,也可以在应用程序的任何其他位置使用。(我们在数据库中还有一些用户的其他详细信息)。

如果有人可以提出更好的方法来实现这一目标,请提供帮助。

这是我目前在授权过滤器中使用的代码:

public class AuthorizeRole : AuthorizeAttribute
{
    private bool _authenticated;
    private bool _authorized;

    public string InRoles { get; set; }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        base.HandleUnauthorizedRequest(filterContext);

        if (_authenticated && !_authorized)
        {
            filterContext.Result = new RedirectResult("/account/error");
        }
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        _authenticated = base.AuthorizeCore(httpContext);

        if (_authenticated)
        {
            if (string.IsNullOrEmpty(InRoles))
            {
                _authorized = true;
                return _authorized;
            }

            if (!string.IsNullOrEmpty(httpContext.User.Identity.Name))
            {
                string NTID = httpContext.User.Identity.Name.Split('\\')[1];
                var …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc windows-authentication

6
推荐指数
1
解决办法
737
查看次数

PowerShell 中的命名参数显示为“位置”

我有一个简单的函数,有两个参数。我没有提到它们是位置性的,但当我检查该函数的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受按位置的值)?

Function Test-Params
{
    Param
    (
        [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param1,

        [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param2
    )

    Write-Host "$Param1 $Param2"
}
Run Code Online (Sandbox Code Playgroud)

当我检查此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但它不应该工作):

Test-Params test1 test2
test1 test2
Run Code Online (Sandbox Code Playgroud)

帮助输出:

help Test-Params -Full

NAME
    Test-Params

SYNTAX
    Test-Params [-Param1] <Object> [[-Param2] <Object>]  [<CommonParameters>]


PARAMETERS
    -Param1 <Object>

        Required?                    true
        Position?                    0
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

    -Param2 <Object>

        Required?                    false
        Position?                    1
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
Run Code Online (Sandbox Code Playgroud)

powershell parameter-passing

5
推荐指数
1
解决办法
731
查看次数

Chrome/Edge 开发人员工具不会在“源”选项卡中显示源代码,除非刷新

我浏览了很多关于这个问题的问题和答案,但没有一个答案谈论问题的根本原因以及如何永久解决它。

当我打开 Google Chrome 或 Edge 浏览器中任何选项卡的开发人员工具并检查“源”选项卡时,默认情况下它不显示源代码(对于 JavaScript/脚本)。但是,如果我在开发人员工具仍然打开的情况下刷新页面,它就会开始显示源代码。

我不知道在哪里以及如何修复此行为,早些时候,当我打开开发人员工具时,此功能可以正常工作,它用于在“源”选项卡下显示源代码,而无需刷新页面。

一些屏幕截图可以帮助更好地理解我的意思:

  1. 当我打开开发人员工具时,“源”选项卡(刷新页面之前)。即使我双击文件名,除非刷新整个页面,否则它仍然不会显示源页面。 刷新页面之前

  2. 刷新页面后的“来源”选项卡 刷新页面后

编辑:开发人员窗口中的当前设置以防万一有助于识别问题:

在此输入图像描述

google-chrome developer-tools microsoft-edge google-developer-tools

5
推荐指数
1
解决办法
3878
查看次数

正则表达式 - 忽略多个空格并仅考虑匹配中的一个空格

我偶然发现了一个正则表达式,在尝试了几种不同的方法后无法修复它。

以下是带有示例输入的正则表达式的链接,下面是用于快速参考的正则表达式和示例文本:

正则表达式

    ((XYZ|xyz|Xyz|Convent){1}(\s{0,})(INTERNATIONAL|International|international|INC|Inc|inc|LLC|Llc|llc|WORLDWIDE PTE\. LTD\.){0,})([\r\n]|[\t]|[ ]{2,})(?<CircuitID>[a-zA-Z0-9\-\/\ ]{6,26})\s*
Run Code Online (Sandbox Code Playgroud)

输入示例

Circuits Affected:
Company Name    Circuit ID      Z End   Billing ID      ServiceType
XYZ INTERNATIONAL      A1B101012        ABCD-XYZ-ABG089AB       A000123456      UNI
XYZ INTERNATIONAL   AB/PQRS/012345/ /ABC /  PQRSTUVW    ABCDEFGH    CO ADDRESS CITY 1234 S RIDGELINE BLVD   VA SOMECITY 12345 SOME BRANCH PKWY  A0123456    N/A 0:00 CDT - 1:00 CDT 
________________________________________
XYZ INTERNATIONAL   AB/ABYX/271703/ /ABC /  ABCDO47HBS  ABCDEFG71   N/A N/A A0123456    N/A 0:00 CDT - 1:00 CDT 
________________________________________
XYZ WORLDWIDE PTE. LTD. A1234597    N/A …
Run Code Online (Sandbox Code Playgroud)

regex

5
推荐指数
1
解决办法
1442
查看次数

使用动态属性名称反序列化 Newtonsoft Json 数据 - C#

我提到了这个问题,它与我的问题类似,但无法完全解决问题,因为数据结构不同,而且我无法弄清楚如何将此解决方案应用于下面给出的示例数据:

JSON 响应

{
    "result": {
        "RITM2572913": {
            "number": "RITM2572913",
            "state": "1",
            "stage": "fulfillment",
            "Sys_ID": "220e89681b31b384e3a0a79b2d4bcbf3",
            "requested_for": "1d1673c4dbda5b0072a85099dc9619b0",
            "Contoso_requested_for": "requested_for:1d1673c4dbda5b0072a85099dc9619b0,var_name_arr:",
            "Contoso_sc_Purposeofthef5request": "Add",
            "Contoso_Sc_Contactinfo": "Contact ",
            "Contoso_sc_Appname": "Application ",
            "Contoso_sc_Description": "Description",
            "Contoso_special_instructions": "special_instructions:",
            "business_justification": "Justification ",
            "Contoso_business_justification": "busess_justification:Justification",
            "Contoso_catalog_item_footer": "owner_info:"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这样的响应数据,需要对其进行反序列化以适应下面给出的对象模型:

对象模型

public class RITMGETRequestResponse
{
    public RITMDetails result { get; set; }

    public class RITMDetails
    {
        public string business_justification { get; set; }
        public string number { get; set; }
        public string requested_for { get; set; }
        public …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

2
推荐指数
1
解决办法
2836
查看次数