ReactとRedux(Node.jsバックエンドを使用)で1ページのアプリケーションを作成しています。ユーザーの役割に応じてReactコンポーネントの子を非表示にする
ロールベースのアクセス制御を実装したいと思います。アプリケーションの特定の部分(またはサブ部分)の表示を制御したいと考えています。私はこのような構造を持つだけのオブジェクトであるのNode.js、より権限のリストを取得するつもりです
:
{
users: 'read',
models: 'write',
...
dictionaries: 'none',
}
キー保護されたリソースを、
値は、ユーザー権限でありますこのリソース(none
,read
,write
のいずれか)。
私はそれを還元状態に保管しています。十分に簡単だと思われる。
none
react-router
ルートonEnter/onChange
フックまたはredux-auth-wrapper
によって許可が確認されます。それも簡単だね。
read/write
のアクセス許可をどのコンポーネントビューにも適用するにはどのような方法が良いですか(たとえば、ユーザーが{ models: 'read' }
権限を持っている場合は、モデルコンポーネントの編集ボタンを非表示にします)。
私はthis solutionを見つけたし、私の仕事のためにそれを少し変更します。
class Check extends React.Component {
static propTypes = {
resource: React.PropTypes.string.isRequired,
permission: React.PropTypes.oneOf(['read', 'write']),
userPermissions: React.PropTypes.object,
};
// Checks that user permission for resource is the same or greater than required
allowed() {
const permissions = ['read', 'write'];
const { permission, userPermissions } = this.props;
const userPermission = userPermissions[resource] || 'none';
return permissions.indexOf(userPermission) >= permissions.indexOf(permission)
}
render() {
if (this.allowed()) return { this.props.children };
}
}
export default connect(userPermissionsSelector)(Check)
はuserPermissionsSelector
はこのようなものになるだろう。ここで(store) => store.userPermisisons
とユーザー権限オブジェクトを返します。その後
Check
で保護された要素ラップ:ユーザーがmodels
ボタンのwrite
許可は表示されませんがない場合はそう
<Check resource="models" permission="write">
<Button>Edit model</Button>
</Check>
を。
誰もこのようなことをしましたか?これ以上の "エレガントな"ソリューションはありますか?
ありがとうございました!
P.S.もちろん、サーバー側でもユーザー権限がチェックされます。
が:)してください。私はユーザーに基づいて制限された管理ページを持っていました。あなたがやっていることは基本的に私がやったことです。私はバックエンドとしてPHPを使用し、PHPセッションをチェックすることでそれを検証しました(ベストではなく、私が知っていた/うまく機能していました)。そしてそれはうまくページを隠しました。あなたのソリューションがうまくいけば、私はあまり気にしませんが、レンダリングで 'else'ステートメントを'あなたはこのページへのアクセス権がありません。ページが壊れていると思っているのではなく、何かを見ることができます。 –
ありがとうございますが、すでに開いているページの 'edit'や 'delete'ボタンのようなアクションコントロールを非表示にしたいので、 'else'ステートメントは不要です。 –
あなたが '{exists &&