gpt4 book ai didi

asp.net-mvc - 在 Controller 中授权一项操作但不需要角色

转载 作者:行者123 更新时间:2023-12-01 01:07:28 26 4
gpt4 key购买 nike

我有一个产品 Controller ,它需要“product_editor”的角色来访问大多数方法。有一些操作不需要授权,因此 [AllowAnonymous] 效果很好。但是,我有一项操作需要他们登录,但他们可能不是产品编辑。

有没有一种简单的方法可以为一个 Action 声明这个?

你可以看到我的一些尝试被注释掉了

[Authorize(Roles = "product_editor")]
public class ProductController : Controller
{
#region Public Actions
[AllowAnonymous]
public ActionResult Search(string keyword...

[AllowAnonymous]
public ActionResult Details(string id...
#endregion

//[Authorize]
//[Authorize(Roles="")]
public ActionResult AuthorizedDownload(long id, string step)
{
SecureDownloadLink link = SecureDownloadLink.Load(id);
if(link.belongsTo(HttpContext.Current.User.Identity.Name))
{
//Allow download
}
else
{
//Return 404 Error
}
}
}

- 编辑 -

找到了一个可行的解决方案,但会喜欢基于属性的解决方案,因为我的其余身份验证是在属性中完成的,而 [AllowAnonymous] 有点误导。
[AllowAnonymous]
public ActionResult AuthorizedDownload(long id, string step)
{
if (!User.Identity.IsAuthenticated)
return RedirectToAction("Login", "Account", new { ReturnUrl = Request.Url.LocalPath });
....
}

最佳答案

我不认为有一种简单的方法可以实现这一点,除了在每个 Controller 操作上显式指定 Authorize 属性:

public class ProductController : Controller
{
#region Public Actions
[AllowAnonymous]
public ActionResult Search(string keyword...

[AllowAnonymous]
public ActionResult Details(string id...
#endregion

[Authorize]
public ActionResult AuthorizedDownload(long id, string step)
{
SecureDownloadLink link = SecureDownloadLink.Load(id);
if(link.belongsTo(HttpContext.Current.User.Identity.Name))
{
//Allow download
}
else
{
//Return 404 Error
}
}

[Authorize(Roles = "product_editor")]
public ActionResult SomeOtherAction()
{
...
}
}

或者,如果您有许多 Action ,另一种可能是在单独的 Controller 中移动不同的 Action 。

关于asp.net-mvc - 在 Controller 中授权一项操作但不需要角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17573440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com