小编Kyl*_*ard的帖子

如何获取当前获得焦点的控制节点?

我试图确定哪个控制节点刚刚改变了焦点。通过将节点上的焦点模式更改为 ,已设置另一个控制节点以使用焦点All。从该节点的脚本中,我可以通过检查来判断它是否具有焦点has_focus。但是,我想从另一个脚本中判断它是否改变了焦点。

我知道有focused_entered一些focus_exited信号可以监听,但是这些组件在组件树上彼此相距很远,我不想通过一堆不相关的组件连接或冒泡信号。

控制文档说

只有一个Control节点可以成为键盘焦点。

由于只有一个节点处于焦点,是否有一个全局函数可以确定单个节点当前具有焦点的内容?我如何知道全球焦点何时发生变化?

gdscript godot

9
推荐指数
1
解决办法
7235
查看次数

当前用户 ID 进入数据库上下文的全局过滤器

我有一个数据库上下文,我想过滤它,以便登录的用户只能看到他们拥有的项目。我只想在数据库上下文中指定此过滤器,因此我不必尝试在多个位置维护它。最终结果是将这样的过滤器添加到我的数据库上下文中:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Foo>().HasQueryFilter(f => f.OwnerId == getCurrentUserIdSomehow())
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我的想法是创建一个服务来获取当前登录的用户,如下所示:

public interface IUserProvider
{
    string GetUserId();
}

public class UserIdProvider : IUserProvider
{
    private IHttpContextAccessor _accessor;
    public UserIdProvider(IHttpContextAccessor accessor)
    {
        _accessor = accessor;
    }

    public string GetUserId()
    {
        var identity = _accessor.HttpContext.User.Identity;
        if (identity.IsAuthenticated)
        {
            return _accessor.HttpContext.User
                .FindFirst(ClaimTypes.NameIdentifier).Value.ToString();
        }
        else
        {
            return Guid.Empty.ToString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ConfigureServices()然后,我可以在以下方法中注入它Startup

services.AddTransient<IUserProvider, UserIdProvider>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)

然后,一旦我将该服务注入到数据库上下文的构造函数中,我的过滤器就会变成:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Foo>().HasQueryFilter(f => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core asp.net-core asp.net-core-2.0

8
推荐指数
0
解决办法
2250
查看次数

SqlCommand 中用户指定的存储过程名称

我正在使用以下代码创建一个SqlCommand由用户指定的存储过程的名称UserStoredProcedureName

new SqlCommand(UserStoredProcedureName, connection)
               { CommandType = CommandType.StoredProcedure }
Run Code Online (Sandbox Code Playgroud)

没有对用户提供的字符串进行验证UserStoredProcedureName。用户是否只能指定数据库中存储过程的名称?用户是否能够通过制作恶意存储过程名称来执行 SQL 注入攻击?

例如:

UserStoredProcedureName = "SELECT * FROM USERS";
Run Code Online (Sandbox Code Playgroud)

c# sql-server stored-procedures sql-injection

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