我试图确定哪个控制节点刚刚改变了焦点。通过将节点上的焦点模式更改为 ,已设置另一个控制节点以使用焦点All。从该节点的脚本中,我可以通过检查来判断它是否具有焦点has_focus。但是,我想从另一个脚本中判断它是否改变了焦点。
我知道有focused_entered一些focus_exited信号可以监听,但是这些组件在组件树上彼此相距很远,我不想通过一堆不相关的组件连接或冒泡信号。
控制文档说:
只有一个
Control节点可以成为键盘焦点。
由于只有一个节点处于焦点,是否有一个全局函数可以确定单个节点当前具有焦点的内容?我如何知道全球焦点何时发生变化?
我有一个数据库上下文,我想过滤它,以便登录的用户只能看到他们拥有的项目。我只想在数据库上下文中指定此过滤器,因此我不必尝试在多个位置维护它。最终结果是将这样的过滤器添加到我的数据库上下文中:
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) 我正在使用以下代码创建一个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)