1

Orchard 1.6 を使用して、Iv は新しいロール「FactoryWorker」を作成しました。このユーザーがフロント エンドからログインすると、1 つのページのみに移動する必要があります。

OrchardLocal/System/ManufacturedProducts

このページを注文の詳細の印刷画面に設定したので、工場の従業員は出荷の準備ができている製品を知ることができ、メニューが表示されないためナビゲートできませんが、ユーザーが他のページをブロックする必要がありますアクセスが許可されていないページの URL を入力することにしました。

これは、この特定のユーザーが(ログイン後に)アクセスできるようにする唯一のページであり、ユーザーをログアウトしてホームページに戻すログアウトボタンを追加しました。

そのため、権限やコンテンツなどを使用してロールを編集することを検討してきましたが、これはすべてフォームとコンテンツ全般に適用されるようです。ユーザーが任意のコンテンツ タイプなどにアクセスできる場所...

それで、誰かがこれを行う方法について私にアドバイスできますか?返信ありがとうございます

更新 これは私が話しているコンテンツタイプ、アイテム、または部分ではないことを忘れていました。ダッシュ ボードからアクセスできる独自のコントローラーとビューと VM を作成しました (AdminMenu を使用して、管理者ユーザーを OrchardLocal/System/ManufacturedProducts に移動します)。

Orchard.ContentPermissions 機能を見てきましたが、1) 他のユーザーに権限を付与するか、2) 自分のコンテンツに権限を付与することしかできないようです

何か案は?

4

3 に答える 3

4

Request Filter を使用できます (それが最善の方法かどうかはわかりません)。

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();
            }
        }
    }
}

注: 未テストのコード!

EDIT : また、ロジックを逆にして、ログインしたユーザーが「FactoryUser」ロールを持っているかどうかを確認し、表示されるページを除くすべてのページへのアクセスを制限することもできます。

于 2013-09-18T17:00:25.747 に答える
3

モジュールで新しいアクセス許可を作成し (例については、permissions.cs ファイルの 1 つを参照)、そのアクセス許可のみを持つロールを作成できます。コントローラーのアクションでそのアクセス許可を確認します (ここでも、permission.cs の 1 つで定義されているアクセス許可の使用法を見つけることで、多くの例が見つかりました)。

于 2013-09-19T04:54:10.487 に答える
2

Content Permissions モジュールを使用できます。このモジュールを使用すると、コンテンツ アイテムのパーミッション パーツをコンテンツ タイプにアタッチできます。この部分では、作成時にコンテンツを表示できるロールを選択できます。

于 2013-09-17T09:25:28.393 に答える