小编reg*_*uld的帖子

覆盖ASP.NET Core 1.0 MVC中的全局授权过滤器

我试图在ASP.NET Core 1.0(MVC 6)Web应用程序中设置授权.

更严格的方法 - 默认情况下,我希望将所有控制器和操作方法限制为具有Admin角色的用户.所以,我正在添加一个全局授权属性,如:

AuthorizationPolicy requireAdminRole = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .RequireRole("Admin")
    .Build();
services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(requireAdminRole));});
Run Code Online (Sandbox Code Playgroud)

然后我想允许具有特定角色的用户访问具体的控制器.例如:

[Authorize(Roles="Admin,UserManager")]
public class UserControler : Controller{}
Run Code Online (Sandbox Code Playgroud)

这当然是行不通的,因为"全局过滤器"不允许UserManager访问控制器,因为它们不是"管理员".

在MVC5中,我能够通过创建自定义授权属性并将我的逻辑放在那里来实现这一点.然后使用此自定义属性作为全局.例如:

public class IsAdminOrAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        ActionDescriptor action = filterContext.ActionDescriptor;
        if (action.IsDefined(typeof(AuthorizeAttribute), true) ||
            action.ControllerDescriptor.IsDefined(typeof(AuthorizeAttribute), true))
        {
            return;
        }

        base.OnAuthorization(filterContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图创建一个自定义AuthorizeFilter,但没有成功.API似乎有所不同.

所以我的问题是:是否可以设置默认策略,然后为特定控制器和操作覆盖它.或类似的东西.我不想这样做

[Authorize(Roles="Admin,[OtherRoles]")]
Run Code Online (Sandbox Code Playgroud)

在每个控制器/操作上,因为这是一个潜在的安全问题.如果我不小心忘记了这个Admin角色会发生什么.

c# asp.net-core-mvc asp.net-core asp.net-core-1.0

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

EF Core 1.0 - Include()生成多个查询

我正在使用EF 7.0.0-rc1-final.

以下语句在服务器上生成多个查询.这是正常的还是我遗失了什么?

Group myGroup = dbContext_
            .Set<Group>()
            .Include(x => x.GroupRoles)
            .ThenInclude(x => x.Role)
            .FirstOrDefault(x => x.Name == "Approver");
Run Code Online (Sandbox Code Playgroud)

我看到在服务器上执行了两个单独的查询:

查询1

查询2

这是一个标准的多对多场景.为什么是第一个查询?

谢谢

entity-framework-core

11
推荐指数
1
解决办法
2922
查看次数

从ASP.NET Core 1.0中的ViewModel元数据输入占位符

是否可以设置内置asp-for标记帮助器以从[Display(Prompt = "This is the placeholder")]视图模型中的属性获取输入占位符.

[Display(Name="Name", Prompt = "This is the placeholder")]        
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

在MVC 5中,我可以通过在编辑器模板中添加其他逻辑并检查ViewData.ModelMetadata.Watermark属性来实现此目的.例如:

@model string
@{
    Dictionary<string, object> htmlAttributes = new Dictionary<string, object>();
    htmlAttributes.Add("class", "form-control");
    if (!string.IsNullOrWhiteSpace(ViewData.ModelMetadata.Watermark))
    {
        htmlAttributes.Add("placeholder", ViewData.ModelMetadata.Watermark);
    }
}
@Html.Label("")
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes)
@Html.ValidationMessage("", "", new { @class = "text-danger" })
Run Code Online (Sandbox Code Playgroud)

但是现在在ASP.NET Core 1.0中我想开始使用新的标签帮助方法.默认情况下,构建asp-for助手只是忽略Prompt属性值.

拥有我自己的asp-for属性的自定义实现,例如my-asp-for是一个选项,并且最有可能的是,为了可维护性和重用其他逻辑,我最终会拥有它.但后来该Watermark物业不再存在ModelMetadata,即没有这样的东西For.Metadata.Watermark.

我能看到帮助器中唯一Prompt值的地方 …

razor asp.net-core-mvc asp.net-core asp.net-core-1.0

10
推荐指数
1
解决办法
6311
查看次数

angular-cli-如何更改生成的css / js捆绑文件的名称

我正在使用angular-cli 1.0.0-beta.24。运行时ng build --production,是否可以更改生成的* .bundle.css和* .bundle.js文件的名称?

默认名称为:main。[hash] .bundle.js样式。[hash] .bundle.cssvendor。[hash] .bundle.jsinline。[hash] .bundle.js,我想更改这些。这也应该反映在index.html中生成的CSS /脚本链接的自动更改中。

提前致谢。

angular-cli angular

7
推荐指数
1
解决办法
2781
查看次数