3

我正在实施一个Custom Authorize Attributein MVC3。我将页面级别权限存储在数据库中,并希望将我的授权属性传递给页面 ID。类似的东西:

[CustomAuthorize(PageID = 1)]
public ActionResult About()
{
    return View();
}

我如何实现Authorize Attribute, 作为AuthorizeCore覆盖中唯一的一个参数?

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
    }
}
4

2 回答 2

5

您将定义一个类级别的变量来保存 PageID,并且您的属性的构造函数会将其作为参数。或者要像在示例中那样使用它,您将创建一个名为 PageID 的公共属性。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public int PageID{get; set;}

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
         //use PageID to do checks here.
    }
}

然后在您的AuthorizeCore中,您将使用该属性/字段值进行检查。

于 2013-01-03T20:29:08.913 回答
0

(自定义用户类型)只是一些调整

测试控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;


namespace Authorise.Controllers
{
    public class TestController : Controller
    {
        // GET: /Default1/
        [CustomAuthorize(UserType = "Admin")]
        public ActionResult Index()
        {
            return View();
        }

    }

    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public string UserType { get; set; }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (UserType == "Admin")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

测试视图

@{
    ViewBag.Title = "Test";
}

<h2>Test</h2>

帐户控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Authorise.Controllers
{
    public class AccountController : Controller
    {
        //
        // GET: /Account/

        public ActionResult Index()
        {
            return View();
        }
        public ActionResult LogOn()
        {
            return View();
        }

    }
}

帐户登录视图

@{
   ViewBag.Title = "LogOn";
}

登录

于 2016-04-19T04:29:47.660 回答