登录用户只能访问1页?

时间:2013-09-15 18:11:30

标签: orchardcms orchardcms-1.6 orchardcms-1.7

使用Orchard 1.6 Iv创建了一个新角色'FactoryWorker'。当该用户从前端登录时,我希望它们仅导航到一个页面。

OrchardLocal /系统/ ManufacturedProducts

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

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

所以我一直在寻找编辑角色,权限和内容等......但这一切似乎都适用于一般的表单和内容。用户可以访问任何内容类型等...

有人可以告诉我如何做到这一点吗? 谢谢你的回复

更新 我忘了提到这不是我所说的内容类型,项目或部分。 我创建了自己的控制器&查看&可从仪表板访问的VM(使用AdminMenu,将管理员用户带到OrchardLocal / System / ManufacturedProducts)

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

任何想法?

3 个答案:

答案 0 :(得分: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”角色,并限制其访问除他们应该看到的页面之外的每个页面。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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