1

使用 Orchard 1.6 Iv 创建了一个新角色“FactoryWorker”。当这个用户从前端登录时,我希望他们只被导航到一页。

OrchardLocal/System/ManufacturedProducts

我已将此页面设置为订单详细信息的打印屏幕,因此工厂工人将知道哪些产品准备好发货,并且由于没有出现菜单,他们将无法导航,但还需要阻止其他页面以防用户决定输入他们不允许访问的页面的 URL。

这是我希望这个特定用户能够访问的唯一页面(在他们登录后),我添加了一个注销按钮,用于注销用户并将他们返回到主页。

因此,我一直在查看具有权限和内容等的编辑角色……但这一切似乎都适用于一般的表单和内容。用户可以在哪里访问任何内容类型等...

那么有人可以建议我如何做到这一点吗?感谢您的回复

更新 我忘了提到这不是我正在谈论的内容类型、项目或部分。我创建了自己的控制器和视图和虚拟机,可以从仪表板访问(使用 AdminMenu,它将管理员用户带到 OrchardLocal/System/ManufacturedProducts)

我查看了 Orchard.ContentPermissions 功能,但它似乎只允许我 1)授予他人权限或 2)授予自己内容的权限

有任何想法吗?

4

3 回答 3

4

您可以使用请求过滤器,(我不知道这是否是最好的方法):

FilterProvider – 定义应用于每个请求的过滤器。类似于默认 ASP.NET MVC 操作筛选器的工作方式,不同之处在于它不是属性。所有 FilterProvider 对象都被注入到请求管道中并应用于所有请求(因此您需要在适当方法的开头检查当前请求是否适合您的过滤器)。

来自:http ://www.szmyd.com.pl/blog/most-useful-orchard-extension-points

所以你可以实现这样的东西

public class Filter : FilterProvider, IAuthorizationFilter {

    private readonly IAuthenticationService _authenticationService;

    public Filter(IAuthenticationService authenticationService) {
        _authenticationService = authenticationService;
    }


    public void OnAuthorization(AuthorizationContext filterContext) {

        //If route is the restricted one
        if (filterContext.HttpContext.Request.Url.AbsoluteUri.Contains("OrchardLocal/System/ManufacturedProducts")) {

            //Get the logged user
            IUser loggedUser = _authenticationService.GetAuthenticatedUser();

            if (loggedUser == null)
                return filterContext.Result = new HttpUnauthorizedResult();

            //Get the Roles
            var roles = loggedUser.As<IUserRoles>().Roles;

            if (!roles.Contains("FactoryUser")) {
                //User is not authorized
                return filterContext.Result = new HttpUnauthorizedResult();
            }
        }
    }
}

注意:未经测试的代码!

编辑:您也可以反转逻辑并检查登录用户是否具有角色“FactoryUser”并限制其访问除他们应该看到的页面之外的每个页面。

于 2013-09-18T17:00:25.747 回答
3

您的模块可以创建一个新权限(查看其中一个 permissions.cs 文件作为示例),然后创建一个仅具有该权限的角色。让您的控制器操作检查该权限(同样,通过查找其中一个 permissions.cs 中定义的权限的使用情况找到了许多示例)。

于 2013-09-19T04:54:10.487 回答
2

您可以使用内容权限模块。使用此模块,您可以将内容项权限部分附加到内容类型。这部分允许您选择在创建内容时哪些角色可以看到内容。

于 2013-09-17T09:25:28.393 回答