小编Lui*_*mim的帖子

如何在C#Regex中获取捕获组的名称?

有没有办法在C#中获取捕获组的名称?

string line = "No.123456789  04/09/2009  999";
Regex regex = new Regex(@"(?<number>[\d]{9})  (?<date>[\d]{2}/[\d]{2}/[\d]{4})  (?<code>.*)");

GroupCollection groups = regex.Match(line).Groups;

foreach (Group group in groups)
{
    Console.WriteLine("Group: {0}, Value: {1}", ???, group.Value);
}
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

Group: [I don´t know what should go here], Value: 123456789  04/09/2009  999
Group: number, Value: 123456789
Group: date,   Value: 04/09/2009
Group: code,   Value: 999

c# regex

95
推荐指数
4
解决办法
6万
查看次数

多级授权,不仅基于角色

我们的应用程序使用多种方式来授权访问给定资源.虽然它有效,但它很混乱......好吧,它似乎不对.

1)基于角色的授权

我们有明确定义的角色,每个角色都可以访问一组资源,不同的角色可以访问相同的资源.

截至目前,资源只是在数据库表中映射的MVC动作module,controlleraction.

这似乎没问题,但每次我需要添加一个新的控制器/动作时,我必须将此资源映射到数据库表.

2)基于用户的授权

除了基于角色的授权之外,用户还可以或多或少地访问另一个角​​色的资源子集.例如.:

RoleA:资源一个,b,c ^,d
RoleB:资源X,ÿ,ž
ROLEC:资源1,2,3
用户1:具有RoleA但需要访问资源ÿ
用户2:具有RoleBROLEC但不具有访问资源ž

这被实现为一个user_resources表,其中包含用户有权访问或被拒绝的其他资源的条目(由标志指示).

我可以通过定制访问创建不同的角色,将角色视为一组权限,但这会导致角色爆炸.

3)模型状态授权

如果这还不够,某些操作只能在模型处于某种状态时执行(每个模型都知道什么时候可以完成).例如:只有当用户有权访问编辑资源(通过步骤#1或#2)并且Order可以编辑对象时,才能编辑订单.

Anoter示例:用户可以访问a,Customer如果他有权访问/customer/view资源,并且他拥有该客户(他是该客户的联系信息).

4)在UI中显示信息

角色,角色组或个人用户可以根据其状态查看有关模型的更多或更少信息.

如何在不放弃授予或限制资源访问权限的情况下简化此授权过程?

我在这里缺少任何模式来统一所有这些授权在一个地方?

acl authorization

13
推荐指数
2
解决办法
6895
查看次数

在哪里验证命令的授权?

问题的标题重新开始:我在哪里验证命令的授权?

例如,将客户设置为首选包括:

  • MarkAsPreferred 控制器动作(可以是Winforms或其他);
  • SetCustomerAsPreferredCommand;
  • SetCustomerAsPreferredCommandHandler;
  • Customer.MarkAsPreferred() (域);

我确定了3个地方来检查授权:

  • 用于显示目的的UI(如果用户没有访问权限,用户不应该看到链接/按钮);
  • 控制器动作以验证用户是否有权调用该命令; 假设命令总是成功(关于验证,但我也假设授权),我们有机会告知用户缺乏访问权限;
  • 在调用域逻辑之前的命令内部 ;

SomeView.cshtml

if (authorizationService.Authorize("MarkCustomerAsPreferred))
{
    // show link
}
Run Code Online (Sandbox Code Playgroud)

CustomerController

[HttpPost]
public ActionResult MarkAsPreferred(Guid id)
{
    if (!authorizationService.Authorize("MarkCustomerAsPreferred))
    {
        return RedirectToAction("Unauthorized");
    }

    var MarkCustomerAsPreferredCommand { Id = id };
    ...
}
Run Code Online (Sandbox Code Playgroud)

MarkCustomerAsPreferredCommandHandler

public void Handle(MarkCustomerAsPreferredCommand command)
{
    if (!authorizationService.Authorize("MarkCustomerAsPreferred"))
    {
        throw new Exception("...");
    }

    customer.MarkAsPreferred();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我是否需要在3个地方验证授权,或者我只是过度热心?

我搜索了整个互联网,但没有找到任何关于此的例子或参考.

编辑

经过更多研究和一些测试后,我认为包装命令以添加行为(授权,验证,日志记录),正如Dennis Taub所建议的那样,实施起来更容易,更清晰.

我发现这篇博文正好解释了这个概念.

关于为一个命令设置多个处理程序,我不需要为每个原始命令的每个行为实现一个命令处理程序,一个包装命令可以包装所有处理程序.

authorization cqrs

13
推荐指数
1
解决办法
2759
查看次数

在开始编写方法/类之前要进行多少单元测试?

我开始(至少尝试)使用TDD原理进行编码,我有一个问题:在实际开始编码之前我需要编写多少测试?

以假设的Math类和方法为例Divide(int a, int b).

a)在开始编码之前,我是否必须完全测试所有Math类(,...)的方法?SumAverageMath

b)Divide在开始编码方法之前,我是否必须完全测试该方法,例如断言为零除以?

c)或者我可以创建一个简单的测试断言并验证它是否失败,编写代码并检查它是否正常,为每个方法的断言重新处理过程?

我认为选项c)是正确的,但我找不到答案(我做了一些搜索,但找不到确定的答案).

tdd unit-testing

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

测试是否调用了受保护的方法

我试图测试是否在公共接口中调用受保护的方法.

<?php
abstract class SomeClassAbstract
{ 
    abstract public foo();

    public function doStuff() 
    {    
        $this->_protectedMethod();
    }

    protected function _protectedMethod();
    {
        // implementation is irrelevant
    }
}

<?php
class MyTest extends PHPUnit_Framework_TestCase
{
    public function testCalled()
    {
        $mock = $this->getMockForAbstractClass('SomeClass');
        $mock->expects($this->once())
             ->method('_protectedMethod');

        $mock->doStuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道它被正确调用,但PHPUnit说它从未调用过.

当我测试另一种方式时,从未调用方法时会发生同样的情况:

<?php
abstract class AnotherClassAbstract
{ 
    abstract public foo();

    public function doAnotherStuff() 
    {    
        $this->_loadCache();
    }

    protected function _loadCache();
    {
        // implementation is irrelevant
    }
}

<?php
class MyTest extends PHPUnit_Framework_TestCase
{
    public function testCalled() …
Run Code Online (Sandbox Code Playgroud)

phpunit

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

调试C#应用程序

我来自PHP背景,我的调试"工具"基本上是echo,var_dumpexit.虽然我知道调试的重要性,但我从未尝试使用/学习调试工具.

现在我正在学习C#,我认为如果没有对该领域的广泛了解,我真的无法编程.

所以我的问题是:我在哪里可以了解调试的内容方法?我知道什么是断点(概念上),但如何使用它?如何使用Step into和Step over?这样的基本事情.

作为一个相关的问题,有一些像var_dumpC#(Visual Studio),我可以检查任何对象.

我发现foreach为每个数组/列表查看内容非常困难和痛苦,特别是现在我还在学习语言.

php c# debugging

3
推荐指数
1
解决办法
916
查看次数

在读取文件时保留最后一个新行

我在Python中读取一个文件,其中每个记录由一个空的新行分隔.如果文件以两个或多个新行结束,则按预期处理最后一个记录,但如果文件以单个新行结尾,则不处理.这是代码:

def fread():
    record = False
    for line in open('somefile.txt'):
        if line.startswith('Record'):
            record = True
            d = SomeObject()

        # do some processing with line
        d.process(line)

        if not line.strip() and record:
            yield d
            record = False

for record in fread():
    print(record)
Run Code Online (Sandbox Code Playgroud)

在这个数据样本中,一切都按预期工作('---'是一个空行):

记录1
数据a
数据b
数据c
\n
记录2
数据a
数据b
数据c
\n
\n

但在此,最后的记录没有返回:

记录1
数据a
数据b
数据c
\n
记录2
数据a
数据b
数据c
\n

如何保留文件中的最后一个新行以获取最后一条记录?

PS.:我使用术语"保留",因为我找不到更好的名字.

谢谢.

编辑 原始代码是一个剥离版本,只是为了说明问题,但似乎我剥离了太多.现在我发布了所有功能代码.

更多解释:SomeObject为文件中的每个记录创建对象,并且记录由空的新行分隔.在记录结束时,它会返回对象以便我可以使用它(保存到数据库,与其他对象进行比较等).

当文件以单个新行结束时的主要问题是,最后一条记录没有产生.似乎Python在空白时不会读取最后一行.

python file

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

标签 统计

authorization ×2

c# ×2

acl ×1

cqrs ×1

debugging ×1

file ×1

php ×1

phpunit ×1

python ×1

regex ×1

tdd ×1

unit-testing ×1