2016-05-12 17 views
0

解決策を試すためにこれを改めて言いました。BlogEngine.NET 3.3 - 匿名ユーザーが特定のことをしないようにする

私はBlogEngine.NET 3.3を使用しています。私はブログの投稿の300文字を表示する要件があり、その後、登録ユーザーは、残りの部分を読むために投稿名をクリックします。

私は、300文字を見ることができるようにユーザ(匿名ユーザ)を登録したいと思いますが、投稿の完全な内容を読むと、「このコンテンツを見るために登録してください」というテキストが表示されます。

これまで誰かがこれを達成しているかどうかを調べるためにネットを精査しました。私は以下のコードを見つけました。これを有効にするには、.csとしてApp_Code/Extensionsフォルダに入れます。ただし、3.3では、App_Codeに拡張フォルダはありません。 BlogEngine.Core \ Web \ Extensionsはここにあります。私は以下のコードをweb \ extensionsフォルダに入れてみました。何かするように見えます。私の公開されたすべての投稿を隠します。

誰か助けてくれますか?

using System; 

using System.Data; 

using System.Configuration; 

using System.Web; 

using System.Web.Security; 

using System.Web.UI; 

using System.Web.UI.HtmlControls; 

using System.Web.UI.WebControls; 

using System.Web.UI.WebControls.WebParts; 

using BlogEngine.Core; 

using BlogEngine.Core.Web.Controls; 

using System.Collections.Generic; 



/// <summary> 

/// Summary description for PostSecurity 

/// </summary> 

[Extension("Checks to see if a user can see this blog post.", 

     "1.0", "<a href=\"http://www.lavablast.com\">LavaBlast.com</a>")] 

public class PostSecurity 

{ 

static protected ExtensionSettings settings = null; 



public PostSecurity() 

{ 

    Post.Serving += new EventHandler<ServingEventArgs>(Post_Serving); 



    ExtensionSettings s = new ExtensionSettings("PostSecurity"); 



    s.AddParameter("Role", "Role", 50, true); 

    s.AddParameter("Category", "Category", 50); 



    // describe specific rules for entering parameters 

    s.Help = "Checks to see if the user has any of those roles before displaying the post. "; 

    s.Help += "You can associate a role with a specific category. "; 

    s.Help += "All posts having this category will require that the user have the role. "; 

    s.Help += "A parameter with only a role without a category will enable to filter all posts to this role. "; 



    s.AddValues(new string[] { "Registered", "" }); 



    ExtensionManager.ImportSettings(s); 

    settings = ExtensionManager.GetSettings("PostSecurity"); 

} 



protected void Post_Serving(object sender, ServingEventArgs e) 

{ 

    Post post = (Post)sender; 

    bool continu = false; 



    MembershipUser user = Membership.GetUser(); 



    continu = user != null; 



    if (user != null) 

    { 

     List<string> categories = new List<string>(); 

     foreach (Category cat in post.Categories) 

      categories.Add(cat.Title); 



     string[] r = Roles.GetRolesForUser(); 



     List<string> roles = new List<string>(r); 



     DataTable table = settings.GetDataTable(); 

     foreach (DataRow row in table.Rows) 

     { 

      if (string.IsNullOrEmpty((string)row["Category"])) 

       continu &= roles.Contains((string)row["Role"]); 

      else 

      { 

       if (categories.Contains((string)row["Category"])) 

        continu &= roles.Contains((string)row["Role"]); 

      } 

     } 

    } 



    e.Cancel = !continu; 

    } 

} 

答えて

0

これが解決されました。 BlogEngine.Netのrturが親切にこれを支援しました。

using BlogEngine.Core; 
using BlogEngine.Core.Web.Controls; 
using System.Web; 

[Extension("Secure post", "1.0", "BlogEngine.NET")] 
public class SecurePost 
{ 
    static SecurePost() 
    { 
    Post.Serving += Post_Serving; 
} 

private static void Post_Serving(object sender, ServingEventArgs e) 
{ 
    if(e.Location == ServingLocation.SinglePost) 
    { 
     if (!HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      HttpContext.Current.Response.Redirect("~/account  /login.aspx"); 
     } 
    } 
    } 
} 
0

ので、いくつかの時間前、私はBlogEngine.Netを使用し、私は私の心の上からのお手伝いをしようとするでしょう、私は私の答えが正しいことを本当にわからないんだけど、多分それは、[OK]あなたにいくつかの指針を与えるでしょうか?

公開されていない投稿を表示するアクセス権をメンバーに与えるべきではありません。サイト上の編集者にとっては新しい投稿の下書きを保存することができます。

私が理解しているところでは、あなたの友人だけがブログに投稿を書いているので、その許可を得た唯一の人でなければなりません。

最初のページを稼働させるために必要な場合は、誰もが投稿を閲覧できるようにすることです(私は本当に覚えていません)。その後、投稿を表示するコントロール/ビューをオーバーライド/カスタマイズすることができます。そこには、ユーザーが実際に登録されているかどうかを確認し、投稿を表示するか、登録するようにメッセージを表示するかを選択できます。

+0

はい、そうです。私はそれを私の友人の要求に働かせる方法を試していました。私は、投稿の閲覧時に許可チェックがどこで行われているかを見つけるのに苦労しています。ご意見をいただきありがとうございます。 – Matt

+0

投稿が表示される権限は管理者ページを使って設定されているため、デフォルトでチェックはありませんが、そのビューに追加のロジックを追加してこれを達成できるはずです。 あなたはそれがうまくいくことを願っています! :) – MunchyYDL

関連する問題