mvcウェブサイトの許可を設定しています。そして、私は役割ベースの許可をしています。コントローラ内のアクションには、アクションの目的に応じて異なるロールが必要です。 私が知っていることは、authorizeattribute(キャッシュされた役割が必要なので)が推奨されますが、actionfilter属性で同じ属性を持つことは可能ですか?mvcロールベースのアクセス許可(actionfilterattributeを使用)
現在、私はこれに似actionfilterattributeあります
public class GeneralController : Controller
private User currentUser;
public User CurrentUser {
get {
if (currentUser != null)
return currentUser;
int currentUserId = Convert.ToInt32(httpContext.User.identity.Name);
if (currentUserId != 0) {
this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId)
}
return currentUser;
}
}
と、この属性に
[PermissionRequired(Role.Moderator)]
public class SomeControllerThatNeedsPermission
{
[PermissionRequired(Role.SuperAdmin)]
public ActionResult SomeActionThatNeedsPermission()
{
}
}
を継承するコントローラ上で、現在のユーザーを取得するために
public class PermissionRequired : ActionFilterAttribute{
private readonly Role reqrole;
public PermissionRequired(Role reqRole)
{
reqrole = reqRole;
}
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var ctrl = (GeneralController)filterContext.Controller;
if (!ctrl.CurrentUser.InRole(reqrole)) {
//some code to redirect this to a certain page
}
base.OnActionExecuting(filterContext);
}
}
とGeneralController上を
だから、誰でも助けていただければ幸いです。再歓迎:D
ありがとう!
私はこれに似たものを書いてSourceForgeに張り付きました。それは時間を節約するかもしれません。 https://sourceforge.net/projects/simplerolesecur/ –
(これは実際の解決策ではないので、これはコメントです)素晴らしいブログ投稿がありますので、心に留めておくか、[こちら](http:// blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx)。私はそれが最近のプロジェクトで非常に有用であると感じました。 –
@rick liddle:これは非常に参考になる記事です。ありがとう! - ジェレミー:私はそれを見ます:) – gdubs