我需要编写一些代码以在项目数据库中找到一个ID。用户与项目相连,所有项目都与其他对象(例如会话)都有很多连接。

现在,我需要在运行任何操作之前检查一下,如果用户试图访问会话,则将其连接到与会话连接到的同一项目。

为此,我想在操作上使用[属性]。MVC:创建一个具有参数的自定义[oterizeatTribute]?

这个问题和答案让我开始了,但是我使用控制器的构造函数遇到了麻烦 Project ID

目的是,我可以在每个构造函数,所有对象控制器中编写一些代码,具体取决于项目,找到项目ID并使其可访问(公开) [customauthorize] 将可以访问此项目ID,以检查用户是否访问。

我的问题:

public class SessionController : Controller {

    NASDataContext _db = new NASDataContext();


    public SessionController() {
        var test = RouteData;
        var ses = _db.Sessies.First(q=>q.Ses_ID==1);
    }

我如何访问我的路障? RouteData 一片空白, HttpContext 是无效的 Request 一片空白。

我需要URL中的ID,该ID在Routedata ...

有帮助吗?

解决方案

我建议将此检查放入模型而不是控制器中。在控制器中,您需要装饰需要此检查的每个操作,请记住,这将在将其应用于的每个操作上执行代码,因此您可能不想在控制器级别上应用它。更简单的方法是在模型中实施一次检查,然后您在控制器中没有“关注”访问权限。这将使此访问权限的测试成为可能,因为您只会在一个地方进行测试。

其他提示

这就是我现在为解决它所做的事情,我对此感到非常高兴。

模块部分:

public partial class Module {
    public string FullName {
        get {
            return Mod_Code + " " + Mod_Titel;
        }
    }
    public string ShortName {
        get {
            return Mod_Code;
        }
    }
    public bool IsAccessible() {
        return this.Projecten.IsAccessible();
    }
}

项目部分:

public partial class Projecten {
    public string FullName {
        get {
            if (Proj_Kortenaam == Proj_Naam)
                return Proj_Kortenaam;

            return Proj_Kortenaam + " " + Proj_Naam;
        }
    }
    public string ShortName {
        get {
            return Proj_Kortenaam;
        }
    }

    public bool IsAccessible() {
        return IsAccessible(HttpContext.Current.User);
    }

    public bool IsAccessible(IPrincipal user) {
        //this code checks if the user can access or not
        return MvcApplication.projectToegankelijk(user, this._Proj_ID);
    }
}

然后在模块控制器中

    [NonAction]
    public ActionResult noRights() {
        ViewData["delError"] = "You have no rights.";
        return View("Error");
    }

    //
    // GET: /Modules/Details/5
    public ActionResult Details(int id) {
        var mod = _db.Modules.First(q => q.Mod_ID == id);
        if (mod.IsAccessible()) {
            return View(mod);
        }
        return noRights();
    }

我认为这很整洁:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top