* 認証時にユーザーをグループ管理したい [#k2e43c29] - ページ: [[BugTrack2]] - 投稿者: [[umorigu]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体新機能 - 投稿日: 2016-01-18 (月) 03:22:21 - バージョン: 1.5.0 - リリース予定バージョン: 1.5.1 ** メッセージ [#w365e436] 現状、ページ認証には閲覧・編集許可するユーザー名を直接指定する必要があるが、ユーザー数が増加すると管理が煩雑になる。 ユーザーをグループに所属させ、グループ単位で認証設定することで、管理の手間を和らげる。 例: - グループ group_a: user_1, user_2 - グループ group_b: user_5, user_6 - グループ group_c: user_8, user_9 の場合に - ページ ProjectA に対して、group_a に閲覧認証を設定 -- →gorup_aに所属する user_1, user_2 が閲覧できる - ページ ProjectX に対して group_b, gruop_c に閲覧認証を設定 -- →group_b, group_c に所属する user_5, user_6, user_8, user_9 が閲覧できる ** 実装済みの仕様(2016-01-21) [#f3d563b2] pukiwiki.ini.php にて $auth_type = AUTH_TYPE_FORM; または $auth_type = AUTH_TYPE_BASIC; 例のような動作にするには以下のようなグループ定義を行う。 // Group definition $auth_groups = array( // Groupname => group members(users) 'valid-user' => '', // Reserved 'valid-user' group contains all authenticated users 'group_a' => 'user_1,user_2', 'group_b' => 'user_5,user_6', 'group_c' => 'user_8,user_9', ); $read_auth_pages = array( // Regex Groupname or Username '#^ProjectA#' => 'group_a', '#^ProjectX#' => 'group_b,group_c', '#^Salon#' => 'valid-user', // 認証を通ったユーザーであればだれでも ); -------- - [[pukiwiki:自作プラグイン/userauth.php]]こんなのもありますよ。 -- [[_]] &new{2016-01-18 (月) 14:41:41}; - userauth.php使ってみました。これはよくできていますね。PukiWiki内部でユーザーを管理するのには大変便利なツールだと思います。一方、このチケットで提案しているのは(1)「グループ」という管理単位を加えることでの管理のしやすさと、(2)[[BugTrack2/373]]外部認証連携との合わせ技で、外部認証したユーザーに対してもPukiWiki管理下の「グループ」に属させることでページ単位の認証機能を利用できるようにしたい、というところです -- [[umorigu]] &new{2016-01-20 (水) 00:04:27}; - セッションの実装をまじめにするか、しないかで方向が大きく分かれそうです。 -- [[henoheno]] &new{2016-01-20 (水) 00:30:21}; - 対応しました [[branch_r1_5>sfjp:projects/pukiwiki/scm/git/pukiwiki/commits?branch=branch_r1_5]] この機能(ユーザーのグループ管理)自体はBasic認証の際も有効です -- [[umorigu]] &new{2016-01-21 (木) 06:03:50}; - "Groupname or Username"とありますが、basic_auth()では if (PKWK_READONLY || ! $auth_user || count(array_intersect($auth_user_groups, $user_list)) === 0) という条件になっており、認証されたユーザー$auth_userが所属しているグループ$auth_user_groupsの中に$user_listの中身("Groupname or Username")が含まれているかは確認しているものの、$auth_userが$user_listの中身に含まれているかは見ていないようです。HTTP 302 でフォームなどに飛ぶ他の場合と違って''AUTH_TYPE_BASIC''モードの場合は認証用データ付きで同じURIにリクエストされるはずなので、従来のユーザー名のみ設定しかしていない場合は再び戻ってきた際にグループが一致しないからという理由で認証が拒否されてしまうようです。 -- &new{2016-02-14 (日) 08:53:48}; -- 少しロジックがわかりにくいのですが、$auth_user_groupsの設定時(lib/auth.php - get_groups_from_username())に、ログイン中のユーザー名自身をこの配列の中に含めています。また、read_auth_pagesで例えば'user_a'に許可を与えた場合、ここの$user_listに'user_a'が含まれています。結果として$auth_user_groupsと$user_listの両方に'user_a'が含まれることになり、認証OKと判定されるはずです。もしこの動作になっていない場合はさらに詳細な情報を教えてください -- [[umorigu]] &new{2016-02-15 (月) 21:37:37}; -- e61f26ed5a7d1b8397a47c9f358ad97c86110cbd で再現せずで、どうもこちらの不手際だったようです、申し訳ない。報告を忘れていた isset($_SERVER['PHP_AUTH_USER']) != TRUE の時に if (isset($_SERVER['PHP_AUTH_USER'])) { (中略) } $auth_user = ''; $auth_user_groups = get_groups_from_username($user); の箇所で、初期化されていない$userを使ってget_groups_from_username()に渡しているエラーを解消しようとしてバグらせていたようです..... -- 2016-02-14 (日) 08:53:48の人 &new{2016-02-17 (水) 20:04:23}; -- ここの未初期化も確認します -- [[umorigu]] &new{2016-02-18 (木) 08:46:55}; -- 修正しました [[commit:c9aebbc0e66156b1f330c183153b74ccc209cbf6]] -- [[umorigu]] &new{2016-02-19 (金) 22:47:20}; -- 修正しました [[commit:c7d79dc26af65f4bb4d3d46c934731609f707d1e]] -- [[umorigu]] &new{2016-02-19 (金) 22:47:20}; - それと、pukiwiki.ini.php デフォルトのグループ定義$auth_groupsの 'groupboobar' => 'foo,bar', なのですが、GroupBooBarに見えます。他はユーザー名からキー名を取っているようなので、GroupFooBar(をすべて小文字にしたもの)なのではと思うのですが..... -- &new{2016-02-14 (日) 09:24:52}; -- ご指摘の通りこれはスペルミスでした。 "groupfoobar"に直しました -- [[umorigu]] &new{2016-02-15 (月) 21:38:06}; #comment